2015-11-26 106 views
1

我想遍歷目錄中的子目錄並獲取每個子目錄中的文件數。我(亂)解決方案是這樣的:如何遍歷目錄中的子目錄並計算python子目錄中的文件

import os, sys 
import subprocess 

def Count_files_in_subd(): 

    for root, dirs, files in os.walk("/Path/to/directory", topdown=False): 
     for name in dirs: 
      print name 
      f = os.path.join(root, name) 
      os.chdir(f) 
      i=0 
      for filename in os.listdir(os.getcwd()): 
       i+=1 
      print i 


Count_files_in_subd() 

腳本首先着眼於目錄中一個子目錄接踵而至比的變化是「看」的目錄,內計數的文件。

它的工作原理,但我知道有一個更好的方式來做到這一點在Python中。我在SO上查看了不同的問題,但是當我嘗試了大多數解決方案時,每個子目錄的文件數量只有一個,我假定該目錄被計爲文件。任何幫助如何做到這一點更好,將不勝感激。

回答

1

你可以只重新編寫如下,以顯示文件中的每個文件夾中的號碼:

import os 

def Count_files_in_subd(): 
    for root, dirs, files in os.walk("/Path/to/directory"): 
     print "{} in {}".format(len(files), root) 

Count_files_in_subd() 

root保存當前的文件夾被踩踏,並files已持有的所有文件夾中的,所以你需要統計它們是len(files)

dirs包含在當前文件夾中找到的任何文件夾(將在下一次訪問)。如果你不想訪問某個文件夾,可以從這個列表中刪除它們。

這會爲您提供以下類型的輸出:

5 in /Path/to/directory 
10 in /Path/to/directory/folder_1 
3 in /Path/to/directory/folder_1/deeper 
+0

謝謝你的交代,我在我的思維錯誤:-) –

+1

是的,這是正確的,更好的變量名是'dirpath','dirnames'和'filenames'。你將根傳遞給'os.walk'函數。 –

0

你可以在bash做到這一點,它不是那麼幹淨,但與遞歸上市,你可一定要仔細檢查每個目錄。

ls -lR|while read i ; do J=$(echo $i|awk '{print $1}'|grep d|wc -l); echo  $J; if [ $J -gt 0 ]; then echo "GREATER"; fi done 
相關問題