Python: обойти дерево каталогов и проверить, есть ли в последнем подкаталоге файл - PullRequest
0 голосов
/ 24 июня 2018

Я хочу проверить, есть ли у последних подкаталогов в дереве каталогов определенные файлы.

Например, если есть следующие подкаталоги, которые я хочу просмотреть:

C:\Test Dir\My Dir\ABC
C:\Test Dir\My Dir\Your Dir\XYZ
C:\Test Dir\My Dir\Your Dir\PQR

Iхотите проверить, есть ли в подкаталогах ABC, XYZ и PQR хотя бы один файл со следующим шаблоном: * Orange * .txt

Если, скажем, в ABC есть файл ABC_Orange_true.txt и XYZ,и PQR не имеет файла, соответствующего указанному выше шаблону, я хочу получить их в списке следующим образом:

list = ['C: \ Test Dir \ My Dir \ Your Dir \ XYZ','C: \ Test Dir \ My Dir \ Your Dir \ PQR']

До сих пор я написал следующий код, но застрял здесь:

import os

subdir_list = []
txt_list = []
list = []

for dirName, subdirList, fileList in os.walk('.'):
subdir_list.append(subdirList)

for fname in fileList:
    file_list.append(fname)
    if '.txt' in fname:
        if 'Orange' in fname:
            txt_list.append(fname)

subdir_list = [i for i in subdir_list if i][-1]
print subdir_list
print txt_list

Этот код дает мнеимена файлов и список подкаталогов следующим образом:

['ABC', 'XYZ', 'PQR']
['ABC_Orange_true.txt']

Мне нужна помощь для достижения конечного результата:

>>list >>['C:\Test Dir\My Dir\Your Dir\XYZ', 'C:\Test Dir\My Dir\Your Dir\PQR']

1 Ответ

0 голосов
/ 24 июня 2018

glob модуль ваш друг здесь. Взгляните на это https://docs.python.org/3/library/glob.html#glob.glob Использование его с модулем os может решить вашу проблему. Что-то вроде

import glob, os

def findSubDirs(files):
    subDirs = []

    for f in files:
        if os.path.isdir(f):
            subDirs.append(f)

    return subDirs

def findEmptyLeafDirs(path, filename):
    files, dirs = glob.glob(path + "/*"), []

    subDirs = findSubDirs(files)

    if len(subDirs) == 0:
        fileMatches = glob.glob(path + "/" + filename)

        if len(fileMatches) == 0:
            dirs.append(path)

    else:
        for subd in subDirs:
            dirs.extend(findEmptyLeafDirs(subd, filename))

    return dirs

print(findEmptyLeafDirs("path", "file"))

должен это сделать.

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