2015-11-26 105 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 
相关问题