Медленный файловый траулер - python
Я написал короткий скрипт для поиска в дереве каталогов последних файлов, соответствующих "Data*.txt"
но это мучительно медленно. Это связано с тем, что мне пришлось вложить циклы for (подозреваю).
Пример дерева каталогов:
ROOT
|-- <directoryNameFoo1>
| |-- from # This stays the same in each subdir...
| |-- <directoryNameBar1>
| |-- Data*.txt
|
|-- <directoryNameFoo2>
| |-- from # This stays the same in each subdir...
| |-- <directoryNameBar2>
| |-- Data*.txt
|
|-- <directoryNameFoo3>
| |-- from # This stays the same in each subdir...
| |-- <directoryNameBar3>
| |-- Data*.txt
Мой вопрос: есть ли лучший / более быстрый способ поиска в структуре каталогов, чтобы найти последние совпадающие файлы "Data*.txt"
в каждом поддире?
Код:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import fnmatch
__basedir = os.path.abspath(os.path.dirname(__file__))
last_ctime = None
vehicle_root = None
file_list = []
for root, dirnames, filenames in os.walk(__basedir):
vehdata = []
for filename in fnmatch.filter(filenames, 'Data*.txt'):
_file = os.path.join(root, filename)
if vehicle_root == root:
if os.path.getctime > last_ctime[1]:
last_ctime = [_file, os.path.getctime(_file)]
else:
continue
else:
file_list.append(last_ctime)
vehicle_root = root
last_ctime = [_file, os.path.getctime(_file)]
print(file_list)
1 ответ
Вы можете использовать glob для поиска данных определенного шаблона без какого-либо цикла. Подобно,
import glob
glob.glob('yourdir/Data*.txt')
и использовать glob.glob('yourdir/Data*.txt,recursive=True)
если вы хотите выполнить поиск во всех подкаталогах в указанном вами каталоге.