我想获取PosixPath对象的列表,并根据相应的文件大小对其进行排序。我正在尝试使用排序功能。我要用于排序的键是object.stat().st_size,其中object是PosixPath对象,stat()返回一个os.stat_result对象,而st_size是与PosixPath对象相对应的文件大小。我知道如何使用operator.methodcalleroperator.attrgetter根据对象方法或对象属性进行排序,但是我不知道如何使用methodcaller返回的对象的属性。

我尝试了以下内容和一些变体,但它不起作用:

from operator import attrgetter, methodcaller
from pathlib import Path

sorted(Path('my_directory').glob('*.extension'), key=methodcaller('stat').st_size)

最佳答案

它们不打算合并。您应该使用lambda作为键:

from pathlib import Path
sorted(Path('.').glob('*.py'), key=lambda p: p.stat().st_size)


或者,如果要动态更改排序字段:

key_field = 'st_mtime'
sorted(Path('.').glob('*.py'),
       key=lambda p: attrgetter(key_field)(p.stat()))


而且,如果您真的想使用methodcallerattrgetter,则可以执行以下操作:

sorted(Path('.').glob('*.py'), key=lambda p: attrgetter('st_size')(methodcaller('stat')(p)))

09-07 07:50