为清楚起见,进行了编辑:我正在尝试获取某些文件夹和子文件夹中某种文件类型的url。我有一个清单,名为bannedDir
,在漫游过程中我永远都不想输入。如果出现bannedDir
中的任何单词,我想完全跳过这些目录,我相信我已经做到了。我有一个名为flaggedDir
的正则表达式列表。如果flaggedDir
中的任何单词都在根目录中,则我想对该根下的所有内容进行处理。
首先要在该根目录下执行的操作是排除在excludedDir
中的目录中进行搜索,该目录由bannedDir中的所有条目和flaggedDir
中的某些条目组成。然后,我想从其余文件夹中获取所有xls文件或fileType
的mtime。然后从我称为iniList
的mtime列表中存储最大mtime。
下面的当前代码。
for root, dirs, files in os.walk(topDir, topdown=True):
dirs[:] = [d for d in dirs if d not in bannedDir]
if flaggedDir.search(root) is not None:
dirs[:] = [d for d in dirs if d not in excludedDir]
for name in files:
if name.lower().endswith(fileTypes):
lastModif = [];
timeIndex = [];
fileLocation = os.path.join(root, name);
time = os.path.getmtime(fileLocation);
timeIndex.append(time);
lastModif.append([fileLocation,time]);
if len(lastModif) > 0:
iniList.append(max(lastModif, key=lambda item: item[1]));
例如,
topDir = [C:\\Test\]
fileTypes = '.xls'
bannedDir = [a,b]
flaggedDir = [c,d]
excludedDir = [a,b,c]
dir a -- file 1.xls,
dir b -- file 5.exe,
dir c -- file 2.exe,
dir d -- file 3.xls, file 4.exe, file 5.xls
我应该只能获取file3.xls和5.xls文件,因为目录a,b和c应该被跳过了。然后我应该只获取文件3.xls,因为3的mtime为5000,而文件5的mtime为2000。我的问题是,我似乎在代码中遍历某些目录两次。我也没有得到每个子目录的最大值。我该如何解决?