我想获取PosixPath对象的列表,并根据相应的文件大小对其进行排序。我正在尝试使用排序功能。我要用于排序的键是object.stat().st_size
,其中object是PosixPath对象,stat()
返回一个os.stat_result
对象,而st_size
是与PosixPath对象相对应的文件大小。我知道如何使用operator.methodcaller
或operator.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()))
而且,如果您真的想使用
methodcaller
和attrgetter
,则可以执行以下操作:sorted(Path('.').glob('*.py'), key=lambda p: attrgetter('st_size')(methodcaller('stat')(p)))