如何使用Python计算目录中的文件数量
我需要使用Python来统计目录中的文件数量。 我想最简单的方法是len(glob.glob('*')) ,但是也将该目录计为一个文件。 
有什么办法只能计算目录中的文件吗?
  os.listdir()会比使用glob.glob更有效率。 要testing文件名是否是普通文件(而不是目录或其他实体),请使用os.path.isfile() : 
 import os, os.path # simple version for working with CWD print len([name for name in os.listdir('.') if os.path.isfile(name)]) # path joining version for other paths DIR = '/tmp' print len([name for name in os.listdir(DIR) if os.path.isfile(os.path.join(DIR, name))]) 
 import os path, dirs, files = os.walk("/usr/lib").next() file_count = len(files) 
对于所有types的文件,子目录包括:
 import os list = os.listdir(dir) # dir is your directory path number_files = len(list) print number_files 
只有文件 (避免子目录):
 import os onlyfiles = next(os.walk(dir))[2] #dir is your directory path as string print len(onlyfiles) 
这就是fnmatch非常方便的地方:
 import fnmatch print len(fnmatch.filter(os.listdir(dirpath), '*.txt')) 
更多细节: http : //docs.python.org/2/library/fnmatch.html
 def directory(path,extension): list_dir = [] list_dir = os.listdir(path) count = 0 for file in list_dir: if file.endswith(extension): # eg: '.txt' count += 1 return count 
 import os print len(os.listdir(os.getcwd())) 
 这使用os.listdir并适用于任何目录: 
 import os directory = 'mydirpath' number_of_files = len([item for item in os.listdir(directory) if os.path.isfile(os.path.join(directory, item))]) 
这可以通过一个发生器来简化,并且通过以下步骤快一点:
 import os isfile = os.path.isfile join = os.path.join directory = 'mydirpath' number_of_files = sum(1 for item in os.listdir(directory) if isfile(join(directory, item))) 
 def count_em(valid_path): x = 0 for root, dirs, files in os.walk(valid_path): for f in files: x = x+1 print "There are", x, "files in this directory." return x 
从这个post中取出
 import os def count_files(in_directory): joiner= (in_directory + os.path.sep).__add__ return sum( os.path.isfile(filename) for filename in map(joiner, os.listdir(in_directory)) ) >>> count_files("/usr/lib") 1797 >>> len(os.listdir("/usr/lib")) 2049 
 我很惊讶,没有人提到os.scandir : 
 def count_files(dir): return len([1 for x in list(os.scandir(dir)) if x.is_file()]) 
卢克的代码重新格式化。
 import os print len(os.walk('/usr/lib').next()[2]) 
这是一个简单的一行命令,我觉得很有用:
 print int(os.popen("ls | wc -l").read()) 
 import os total_con=os.listdir('<directory path>') files=[] for f_n in total_con: if os.path.isfile(f_n): files.append(f_n) print len(files) 
如果您使用的是操作系统的标准shell,则可以更快地获得结果,而不是使用纯pythonic方式。
Windows示例:
 import os import subprocess def get_num_files(path): cmd = 'DIR \"%s\" /AD /B /S | FIND /C /V ""' % path return int(subprocess.check_output(cmd, shell=True)) 
我发现另一个答案可能是正确的接受答案。
 for root, dirs, files in os.walk(input_path): for name in files: if os.path.splitext(name)[1] == '.TXT' or os.path.splitext(name)[1] == '.txt': datafiles.append(os.path.join(root,name)) print len(files) 
 我使用glob.iglob作为目录结构类似于 
 data └───train │ └───subfolder1 │ | │ file111.png │ | │ file112.png │ | │ ... │ | │ └───subfolder2 │ │ file121.png │ │ file122.png │ │ ... └───test │ file221.png │ file222.png 
以下两个选项都返回4(如预期的那样, 即不计算子文件夹本身 )
-  len(list(glob.iglob("data/train/*/*.png", recursive=True)))
-  sum(1 for i in glob.iglob("data/train/*/*.png"))
我做了这个,并返回文件夹中的文件数(Attack_Data)…这工作正常。
 import os def fcount(path): #Counts the number of files in a directory count = 0 for f in os.listdir(path): if os.path.isfile(os.path.join(path, f)): count += 1 return count path = r"C:\Users\EE EKORO\Desktop\Attack_Data" #Read files in folder print (fcount(path))