2016-12-14 150 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()*功能,* os.path.splitext()*比* endswith()*更清潔。 – guidot

+0

@guidot - 感謝您的評論,但爲什麼_os.path.splitext()_比_endswith()_更清潔? – Joseph

+1

因爲)你明確指出,要擴展比較,而不是隱藏在這一串B)副作用少文件是否存在名爲* .SHP *(UNIX風格的名稱以點開頭,沒有擴展名意)。 – guidot

相關問題