Я разрабатываю скрипт для чтения журналов в папке журналов и проверки каждого файла журнала .txt:
1), если в журнале есть строка «FileData» и
2), если В журнале нет строки «Ошибка в данных файла»
Если это условие выполнено, ему необходимо прочитать файл и собрать содержимое строки 2. После некоторого исследования topi c я обнаружил, что Решение проблемы и сценарий ниже работает. Проблема заключается в том, что чтение 3000 файлов занимает ~ 20 минут, а с учетом ожидаемого очень быстрого роста числа файлов это решение невозможно.
import os
import mmap
Dict = {}
for log in sorted(os.listdir(log_folder)):
with open(os.path.join(log_folder, log), 'r') as f:
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
if s.find(b'FileData') != -1 and s.find(b'Error in FileData') == -1:
lines = [line for line in islice(f, 2)][:1]
content = lines[1]
Dict[log] = content
Если я запускаю это только с первой находкой ('FileData) , это очень быстро, но момент, когда я добавил второе время поиска («Ошибка в FileData»), увеличился не линейно. Есть ли другой способ выполнить то же действие, но более быстрым? Я пробовал re.findall () и readlines (), но результат был слишком похож на этот.
Спасибо!