Python:遍历目录树并检查最后一个子目录是否有文件

时间:2018-06-24 12:49:54

标签: python-3.x directory-structure

我想检查目录树中的最后一个子目录是否有某些文件。

例如,如果要浏览以下子目录:

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

我想检查ABC,XYZ和PQR子目录是否至少有一个文件,其格式如下: *橙色* .txt

如果说ABC有一个文件 ABC_Orange_true.txt ,而XYZ和PQR没有与上述模式匹配的文件,我想将它们放在列表中,如下所示:

list = ['C:\ Test Dir \ My Dir \ Your Dir \ XYZ','C:\ Test Dir \ My Dir \ Yir 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 :(得分:2)

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"))

应该这样做。