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

但是无论我尝试什么,我都无法获得适用于此的有效 lambda 表达式。如何根据文件夹中的文件数量对文件夹列表进行排序?

4

2 回答 2

5

falsetru 的 评论

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

几乎是正确的答案,但有一点需要考虑:

如果 glob 中返回的路径不是目录,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 回答
2

用作参数lambda d: len(os.listdir(d))key

import glob
import os

list_of_folders = glob.glob('path_to_folder/*')
list_of_folders.sort(key=lambda d: len(os.listdir(d)), reverse=True)
于 2013-10-24T12:32:02.703 回答