使用列表推导统计多个子目录中的所有文件数量
我有一个文件夹,里面有很多子文件夹,每个子文件夹里又有好几个文件。我想要计算所有子文件夹里所有文件的总数。下面这个列表推导式效果不错:
sum_total = len([file for file in os.listdir(current_directory)])
我该怎么修改这个代码,让它能计算所有子文件夹里的文件数量(不仅仅是当前文件夹里的)?还是说我必须用传统的for循环和计数器?有没有类似下面这样的东西可以用呢?
sum_total = len([file in os.listdir(current_directory + '\\' + folder) for folder in os.listdir(current_directory)])
1 个回答
2
os.walk 可以遍历所有的子目录:
import os
total = sum(len(files) for root, dirs, files in os.walk('.'))
需要注意的是,这个只计算文件的数量,不包括任何子目录的名字。这和你发的代码是不同的。
len([file for file in os.listdir(current_directory)])
这个计算的是文件和(顶层)子目录的名字。
顺便说一下,虽然你问的是列表推导式,但我建议使用生成器表达式:
(len(files) for root, dirs, files in os.walk('.'))
在速度上没有明显的区别(至少对于中等大小的目录来说),但是生成器表达式占用的内存更少。