Медленный файловый траулер - 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) если вы хотите выполнить поиск во всех подкаталогах в указанном вами каталоге.

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