如何使用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))