Python:遍历目录树,检查最后一个子目录是否有文件
Python: traverse directory tree and check if last subdirectory has a file
我想检查目录树中的最后一个子目录是否有某些文件。
例如,如果我想浏览以下子目录:
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 没有符合上述模式的文件,我想把它们放在一个榜单如下:
列表 = ['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']
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"))
应该这样做。
我想检查目录树中的最后一个子目录是否有某些文件。
例如,如果我想浏览以下子目录:
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 没有符合上述模式的文件,我想把它们放在一个榜单如下:
列表 = ['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']
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"))
应该这样做。