如何使用 python 2.7 检查文件夹和子文件夹中是否存在文件

How to check If a file isn't exists in folder and subfolders using python 2.7

我试图找到其中缺少文件名 "kavi*" 的文件夹。所有文件夹分布在一个大文件夹中,该文件夹分为许多子文件夹和子文件夹。 我这样开始编写代码,但我不知道如何继续:

import arcpy,fnmatch,os

rootPath = r"D:\PROJECTS\road57\gis\layers\taba\taba-mmi"
pattern = 'kavi*.shp'
for root, dirs, files in os.walk(rootPath):
    for filename in fnmatch.filter(files, pattern):
        print(os.path.join(root, filename))         

输出是:

D:\PROJECTS\road57\gis\layers\taba\taba-mmi3322502\kavim kchulim.shp
D:\PROJECTS\road57\gis\layers\taba\taba-mmi3322950\kavim kchulim.shp
D:\PROJECTS\road57\gis\layers\taba\taba-mmi3350004\kavim_kchulim.shp
D:\PROJECTS\road57\gis\layers\taba\taba-mmi8750012\kavim_kchulim.shp
D:\PROJECTS\road57\gis\layers\taba\taba-mmi8950025\kavim_kchulim.shp
D:\PROJECTS\road57\gis\layers\taba\taba-mmi0050040\kavim_kchulim.shp

>>>

这将打印所有包含 "kavi*" 文件的文件夹。但我需要输出所有不包含 "kavi*" 文件

的文件夹

你可以试试这个

import arcpy,fnmatch,os

rootPath = r"D:\PROJECTS\road57\gis\layers\taba\taba-mmi"
pattern = 'kavi*.shp'
match_set = set()
non_match_set = set()
for root, dirs, files in os.walk(rootPath):
    # Return the subset of the list of names that match pattern.
    # if match doesn't occur return list will be empty, 
    # hence code goes in else block
    if fnmatch.filter(files, pattern):
        match_set.add(root)
    else: 
        non_match_set.add(root)    

print non_match_set

你的os.walk() returns当前路径为root,当它是目录时,其中的文件为files。如果 files 的 none 匹配你的模式,你应该打印出当前的 root.

for root, dirs, files in os.walk(rootPath):
    if files != [] and fnmatch.filter(files, pattern) == []:
        print root