0

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

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

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

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

于 2013-03-09T15:49:24.587 回答