2016-01-27 2 views
0

Я пытаюсь найти папки, в которых отсутствует имя файла «kavi *». Все папки распространяются в одной большой папке, которая делится на множество подпапок и вспомогательных папок. Я начал подобный код, но я не знаю, как поступить:Как проверить Если файл не существует в папке и подпапках с помощью python 2.7

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-mmi\8233\4022502\kavim kchulim.shp 
D:\PROJECTS\road57\gis\layers\taba\taba-mmi\8233\4022950\kavim kchulim.shp 
D:\PROJECTS\road57\gis\layers\taba\taba-mmi\8233\4050004\kavim_kchulim.shp 
D:\PROJECTS\road57\gis\layers\taba\taba-mmi\9887\4050012\kavim_kchulim.shp 
D:\PROJECTS\road57\gis\layers\taba\taba-mmi\9889\4050025\kavim_kchulim.shp 
D:\PROJECTS\road57\gis\layers\taba\taba-mmi\9900\4050040\kavim_kchulim.shp 

>>> 

это напечатать все папки с «кави *». Но мне нужно вывод со всеми папками, которые не включают в себя «кави *» файл

+0

Итак, каков результат, который вы ищете? Вы уже печатаете все соответствующие файлы. –

+1

Я не уверен, понял ли я. Предположим, что у вас есть: 'a /', 'a/b /' 'a/c /', 'a/c/kavi.shp',' a/c/d/'. Каков ожидаемый результат? – MariusSiuram

+0

например, если у меня есть во всех папках «kavi * .shp», и в одной папке у меня нет этого файла, я получаю такой вывод: отсутствующий файл в D: \ PROJECTS \ road57 \ gis \ layers \ таб \ таб-MMI \ 7333 \ 4022000 – user4989939

ответ

1

Ваш os.walk() возвращает текущий путь в качестве root и, когда это справочник, файлы в нем как files. Если ни один из files не соответствует вашему шаблону, вы должны распечатать текущий root.

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

Вы можете попробовать это

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 
Смежные вопросы