Отфильтровать все файлы в каталоге по словам, которые соответствуют нескольким регулярным выражениям

Я пытаюсь отфильтровать все файлы (pdf, txt, csv, ipynp и т. д.) В моем каталоге для слов, которые соответствуют моим выражениям регулярного выражения. Пока что я сделал программу (показанную ниже), которая может читать файлы csv и pdf, но оператор else, который читает все другие типы файлов, продолжает давать мне ошибку (показано внизу). Я что-то неправильно набираю после оператора else :? Я перепробовал все, но безуспешно.

   import glob
import re
import PyPDF2
#-------------------------------------------------Input----------------------------------------------------------------------------------------------
folder_path = "/home/"
file_pattern = "/*"
folder_contents = glob.glob(folder_path + file_pattern)

#Search for Emails
regex1= re.compile(r'\S+@\S+')
#Search for Phone Numbers
regex2 = re.compile(r'\d\d\d[-]\d\d\d[-]\d\d\d\d')
#Search for Locations
regex3 =re.compile("([A-Z]\w+), ([A-Z]{2})")


for file in folder_contents:

    if re.search(r".*(?=pdf$)",file):
        #this is pdf
        with open(file, 'rb') as pdfFileObj:
            pdfReader = PyPDF2.PdfFileReader(pdfFileObj) 
            pageObj = pdfReader.getPage(0)  
            read_file = pageObj.extractText() 
            #print("{}".format(file))
    elif re.search(r".*(?=csv$)",file):
        #this is csv
        with open(file,"r+",encoding = "utf-8") as csv:
            read_file = csv.read()
    else:
            with open(file,"rt", encoding='latin-1') as allOtherFiles:
                continue
    if regex1.findall(read_file) or regex2.findall(read_file) or regex3.findall(read_file):
        print ("YES, This file containts PHI")
        print(file)
    else:
        print("No, This file DOES NOT contain PHI")
        print(file)

Я получаю сообщение об ошибке IsAdirectoryError: [Errno 21] - это каталог: знаете ли вы, почему это сообщение об ошибке продолжает отображаться всякий раз, когда я запускаю код.

  ---------------------------------------------------------------------------
IsADirectoryError                         Traceback (most recent call last)
<ipython-input-40-fdb88fbf61ab> in <module>()
     29             read_file = csv.read()
     30     else:
---> 31             with open(file,"rt", encoding='latin-1') as allOtherFiles:
     32                 continue
     33     if regex1.findall(read_file) or regex2.findall(read_file) or regex3.findall(read_file):

IsADirectoryError: [Errno 21] Is a directory: '/home/jupyter_shared_notebooks'
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не могли бы вы изменить свой оператор with open(file,"rt") as allOtherFiles: на

with open(file,"rt", encoding='latin-1') as allOtherFiles:

Запустите код еще раз и посмотрите, не возникла ли та же ошибка. Если ошибка не исчезнет, ​​придется попробовать другие форматы кодирования.

Обновлено: Чтобы устранить следующую ошибку:

IsADirectoryError: [Errno 21] Is a directory: /home/e136320/jupyter_shared_notebooks

Это вызвано файлом или папкой с именем jupyter_shared_notebooks внутри вашей папки. Потому что python не знает, как открыть jupyter_shared_notebooks, поскольку у него нет формата расширения файла. Это вызывает эту ошибку. Чтобы решить эту проблему, вы можете попробовать

if '.' not in file:
    continue
else:
    with open(file,"rt", encoding='latin-1') as allOtherFiles:
        #rest of your code here

поэтому он работает сейчас, выдает другую ошибку. Я обновил его в своих вопросах выше.

James Davinport 17.12.2018 18:59

-------------------------------------------------- ---------- ‌ --------------- IsADirectoryError Traceback (последний вызов последним) <ipython-input-40-fdb88fbf61ab> в <module> () 29 read_file = csv.read () 30 else: ---> 31 с open (file, "rt", encoding = 'latin-1') as allOtherFiles: 32 продолжить 33, если regex1.findall (read_file) или regex2.findall (read_file) или regex3.findall (read_file): IsADirectoryError: [Errno 21] Это каталог: '/ home / e136320 / jupyter_shared_notebooks'

James Davinport 17.12.2018 18:59

@JamesDavinport, я обновил ответ, чтобы исправить вашу следующую ошибку.

ycx 17.12.2018 19:22

И последнее: знаете ли вы, как передавать контент с latin1 и принимать только обычный текст в читаемом формате?

James Davinport 17.12.2018 19:58

Я не понимаю ваш вопрос-комментарий здесь. Возможно, вы могли бы начать еще один вопрос о стеке? Кроме того, помогло ли следующее решение, которое я предоставил, решить вашу ошибку IsADirectoryError? Пожалуйста, дай мне знать. Спасибо!

ycx 18.12.2018 00:51

Другие вопросы по теме