使用列表推导来获取多个子目录中所有文件的计数

时间:2013-03-09 15:44:08

标签: python list-comprehension

我有一个包含多个子目录的文件夹,每个子目录包含多个文件。我想得到所有子目录中所有文件的总和。以下列表理解效果很好:

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)])

1 个答案:

答案 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('.'))

速度没有显着差异(至少对于中等大小的目录而言),但生成器表达式使用较少的内存。