2016-12-14 3 views
0

Следующий код python подсчитывает количество общих файлов, которые у меня есть, в каталоге, который содержит несколько подкаталогов. Результат печатает имя подкаталога вместе с количеством файлов, которые он содержит.Как получить общее количество определенных файлов в каталоге, содержащем подкаталоги?

Как я могу изменить это так, чтобы:

  • Он смотрит только для расширения конкретного файла (т.е. «* .shp»)
  • Это обеспечивает как количество файлов «.SHP» в каждом подкаталоги и окончательный подсчет всех ".shp" файлы

Вот код:

import os 
path = 'path/to/directory' 
folders = ([name for name in os.listdir(path)]) 
for folder in folders: 
    contents = os.listdir(os.path.join(path,folder)) 
    print(folder,len(contents)) 
+0

Не буквальный копия другой, но довольно чертовски близко. Добавьте рекурсию, и у вас есть ответ. – cwallenpoole

+0

@cwallenpoole - Спасибо, я посмотрю =) – Joseph

ответ

1

вы можете используйте функцию .endswith() для строк. Это удобно для распознавания расширений. Вы можете прокручивать содержимое, чтобы найти эти файлы, а затем следующим образом.

targets = [] 
for i in contents: 
    if i.endswith(extension): 
     targets.append(i) 
print(folder, len(contents)) 
+0

Большое спасибо, ваш код работал;) – Joseph

0

Спасибо за комментарии и ответ, это код, который я использовал (не стесняйтесь флаг моего вопроса как дубликат связанного вопроса, если он слишком близко):

import os 
path = 'path/to/directory' 
folders = ([name for name in os.listdir(path)]) 
targets = [] 
for folder in folders: 
    contents = os.listdir(os.path.join(path,folder)) 
    for i in contents: 
     if i.endswith('.shp'): 
      targets.append(i) 
    print(folder, len(contents)) 

print "Total number of files = " + str(len(targets)) 
+0

Я бы начал с * os..path.walk() * function и * os.path.splitext() * чище, чем * endswith() *. – guidot

+0

@guidot - Спасибо за ваш комментарий, но зачем _os.path.splitext() _ быть чище, чем _endswith() _? – Joseph

+1

Поскольку вы явно указываете, что хотите сравнить расширение, а не скрывать это в строке b) меньше побочных эффектов, если файл существует с именем * .shp * (имя стиля Unix, начинающееся с точки, без расширения). – guidot

Смежные вопросы