Как найти имена файлов внутри каталогов в Python, используя regexp

1

Мне нужно сканировать каталог для ex: C:\Users\Jack\Work и искать имя файла, в котором есть Worklog_201810716_081.log текстовые части, например: Worklog_201810716_081.log.
Может кто-нибудь, пожалуйста, помогите мне, как я могу использовать regexp в своем коде для поиска имени файла.

Я применил следующий жесткий код с именем файла:

reg_lst = ["Error in log"]
for i, line in enumerate(open("C:\\Users\\Jack\Work\\Worklog_201810716_081.log")):
    if any(compiled_reg.match(line) for compiled_reg in reg_lst):
        print("Found on line %s" % (i+1))
        print("Log msg: ", line)

Это выводит сообщение после Error in log Worklog_201810716_081.log.

Мне нужно написать общий код, где мне нужно также сканировать другие файлы журналов в каталоге для текстового поиска.

Теги:

2 ответа

0
Лучший ответ

используйте glob.glob или os.scandir или fnmatch.fnmatch.

Попробуйте glob(r'C:\Users\Jack\Work\*.log') в пакете glob. Это должно показать список файлов .log файлов в каталоге C:\Users\Jack\Work.

Неподтвержденный код:

from glob import glob

reg_lst = ["Error in log"]

for filename in glob(r'C:\Users\Jack\Work\*.log'):
    with open(filename, 'r') as f:
        for i, line in enumerate(f.readlines()):
            if any(compiled_reg.match(line) for compiled_reg in reg_lst):
              print("Found on line %s" % (i+1))
              print("Log msg: ", line)

Другая диссонанс о фильтрации файла по имени.

  • 0
    отлично работает для меня, большое спасибо!
  • 0
    Кстати, фильтрация имени файла не использует regex . он называется Unix shell-style wildcard fnmatch в Unix shell-style wildcard или fnmatch как упомянуто на docs.python.org/3.6/library/fnmatch.html#module-fnmatch
Показать ещё 1 комментарий
0

Я смог написать следующий код, и он работает успешно.

reg_lst = ["Error in log"]
work_path = "C:\Users\Jack\Work\"

for file in os.listdir(work_path):
  if fnmatch.fnmatch(file, '*.log'):
    for i, line in enumerate(open(os.path.join(work_path,file))):
        if any(compiled_reg.match(line) for compiled_reg in reg_lst):
            print("Found on line %s" % (i+1))
            print("Log msg: ", line)

Он ищет все файлы журнала в каталоге work_path и ищет текст "Error in log" и печатает номер строки и все текстовое сообщение в этой строке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню