我正在尝试计算文件夹及其所有子文件夹中的所有文件例如,如果我的文件夹看起来像这样:
file1.txt
subfolder1/
├── file2.txt
├── subfolder2/
│ ├── file3.txt
│ ├── file4.txt
│ └── subfolder3/
│ └── file5.txt
└── file6.txt
file7.txt
我想要7号。
我尝试的第一件事是一个递归函数谁计数所有文件和调用本身为每个文件夹
def get_file_count(directory: str) -> int:
count = 0
for filename in os.listdir(directory):
file = (os.path.join(directory, filename))
if os.path.isfile(file):
count += 1
elif os.path.isdir(file):
count += get_file_count(file)
return count
这种方式工作,但需要大量的时间为大目录。
我还记得this post,它显示了一种使用win32com计算文件夹总大小的快速方法,我想知道这个库是否也提供了一种方法来做我正在寻找的事情。但经过搜索,我只找到了这个
fso = com.Dispatch("Scripting.FileSystemObject")
folder = fso.GetFolder(".")
size = folder.Files.Count
但这只返回目标文件夹中的文件数(而不是其子文件夹中的文件数)
那么,你知道Python中是否有一个最优函数可以返回一个文件夹及其所有子文件夹中的文件数量吗?
7条答案
按热度按时间x8diyxa71#
IIUC你可以
或者,为了避免使用
len
,可能会获得更好的性能:mbskvtky2#
这段代码将显示所有不是目录的目录条目的计数(例如例如,普通文件、符号链接)。
包括测试中使用的计时和实际路径名:
输出:
6psbrbz93#
我使用了os.walk()
这是我的样品,希望对你有帮助
sh7euo9m4#
你也可以直接使用命令:
这将返回所有文件的计数使用
os.system()
可以在python中完成。c8ib6hqw5#
另一个使用
os
和Path
库的解决方案:jgzswidk6#
正确的方法是像其他人指出的那样使用
os.walk
,但要给予另一个尽可能类似于原始解决方案的解决方案:您可以使用
os.scandir
来避免构建整个列表的成本,它应该更快:svdrlsy47#
还有一个办法。
请考虑以下目录结构
要计算文本文件(即即结尾的那些。txt)在每个目录中
看看那些文件是什么
获取文件总数
计数以…结尾的文件。ipynb(ipython notebook文件)
清点所有文件
其与来自树命令的文件计数相匹配。