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 に答える