0

経由するフォルダーのリストがあります

import glob
list_of_folders = glob.glob('path_to_folder/*')
for folder in list_of_folders:

ここで、フォルダー内にあるファイルの量で list_of_folders を並べ替えたいと思います。何かのようなもの

list_of_folders.sort(key= lambda f: len(x) for x in glob.glob(f))

しかし、私が何をしようとしても、これで機能する有効なラムダ式を取得できません。フォルダー内のファイルの量でフォルダーのリストを並べ替えるにはどうすればよいですか?

4

2 に答える 2

5

falsetru の コメント:

sorted(glob.glob('path_to_folder/*'), key=lambda d: len(os.listdir(d)), reverse=True)

ほぼ正解ですが、考慮すべき点が 1 つあります。

グロブで返されたパスがディレクトリでない場合、os.listdir()失敗します。これを克服するために、次のことができます。

from glob import glob
import os

list_of_dirs = filter(os.path.isdir, glob('path_to_folder/*'))
list_of_dirs.sort(key=lambda d: len(os.listdir(d)), reverse=True)

または、このワンライナーを実行できます。

sorted(glob('path_to_folder/*/'), key=lambda d: len(os.listdir(d)), reverse=True) 

最後にエクストラを使用して、/ディレクトリのみが返されるようにしますが、これは最初の方法よりも少し安定性が低くなります (ただし、見た目は少し良くなります)。

于 2013-10-24T12:41:14.000 に答える