наилучшим образом фильтровать сетевой диск с использованием fast_than_walk? - PullRequest
0 голосов
/ 21 апреля 2020

У меня сетевой диск содержит различные каталоги и папки. На этом diks в Z: / main / у меня есть интересные мне dirs с: "DATA-" в названии. В этих папках снова различные каталоги и файлы. В этих папках у меня должны быть (что-то, чего у меня нет) журналы регистрации. И в этих логах есть .csv или .txt файлы с рапортами. Еще одна кодировка - logs dir в названии содержит год ex: 2017XXxxLog. Мне нужны только журналы 2018 +.

Так что я создаю этот простой скрипт, используя walk:

import os

path = Z/main/:

def findAllOutDirs(path):
    finalPathList = []
    for root, subdirs, files in os.walk(path):
            for d in subdirs:
                    if d == "log" or d == "LOG":
                        outPath = root+r"\{}".format(d)
                        if ("DATA" in outPath) and ("2018" in outPath or "2019" in outPath or "2020" in outPath):
                            finalPathList.append(outPath)
    return finalPathList

dirsList = findAllOutDirs(w_path)

files = []
# r=root, d=directories, f = files
for i in dirsList:
    for r, d, f in os.walk(i):
        for file in f:
            pathToCsv = os.path.join(r, file)
            if ('.txt' in pathToCsv)  or ('.csv' in pathToCsv) or ('.CSV' in pathToCsv):
                #print(pathToCsv)
                files.append(pathToCsv)

Так, как U может видеть, первая функция смотрит * log 100 * или LOG dirs, и если в пути значение 2018|2019|2020, то путь добавляется в список. И теперь у меня есть пути ко всем интересным каталогам.

Далее я снова использовал прогулку и получил список для поиска файлов CSV или txt. Поэтому я получил только файлы из

DATA*/2018|2019|2020*/log|LOG/*.csv|*.txt.

По крайней мере, у меня есть правильный список, но это занимает много времени. Кто-то здесь посоветовал мне использовать faster_than_walk library, поэтому я попытался сделать это, но я не могу построить правильный путь:

new_list = ftw.walk_glob("Z/main/*Data*/*2018*/log/*.csv) - и я получил правильный результат только для 2018 и * .csv, поэтому я нужно повторять несколько раз одну и ту же инструкцию с разными параметрами. Это можно сделать за одну инструкцию?

Или, может быть, это лучший способ, чем мой? Мне действительно нужно оптимизировать этот поиск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...