我有一个包含多个子目录的文件夹,每个子目录包含多个文件。我想得到所有子目录中所有文件的总和。以下列表理解效果很好:
sum_total = len([file for file in os.listdir(current_directory)])
我如何修改它以包括计算所有子目录(不仅仅是current_directory)中的所有文件?或者我必须使用传统的for循环和计数器?是否有类似我可以使用的以下内容?
sum_total = len([file in os.listdir(current_directory + '\\' + folder) for folder in os.listdir(current_directory)])
答案 0 :(得分:3)
os.walk将递归所有子目录:
import os
total = sum(len(files) for root, dirs, files in os.walk('.'))
请注意,这仅计算文件,而不计算任何子目录的名称。 这与您发布的代码不同。
len([file for file in os.listdir(current_directory)])
计算文件和(顶层)子目录的名称。
顺便说一下,虽然您要求列表理解,但我建议generator expression:
(len(files) for root, dirs, files in os.walk('.'))
速度没有显着差异(至少对于中等大小的目录而言),但生成器表达式使用较少的内存。