Python 对文件夹中的文件进行排序
我需要清理我的归档文件夹,以便只保留按版本类型和版本id排序的前两个文件 我将文件名分解为一个列表,并尝试使用operator.itemgetter进行排序,但多次排序是一项代价高昂的操作 例如: 1.0.0-release-735586.zip 1.0.0-release-447088.zip 1.0.0-release-436044.zip 1.0.1-patch-480506.zip 1.0.1-patch-968125.zip 1.0.1-patch-532147.zip 应该是 1.0.0-release-735586.zip 1.0.0-release-447088.zip 1.0.1-patch-968125.zip 1.0.1-patch-532147.zip使用itertools,即 在这里,我们可以通过排除列表元素的最后10个字符对其进行分组,即'1.0.0-release-735586.zip'[:-10]将给出'1.0.0-release-' 对于每个组,我们仅通过按降序排列前两个元素。这是通过排序和[:2]完成的Python 对文件夹中的文件进行排序,python,sorting,Python,Sorting,我需要清理我的归档文件夹,以便只保留按版本类型和版本id排序的前两个文件 我将文件名分解为一个列表,并尝试使用operator.itemgetter进行排序,但多次排序是一项代价高昂的操作 例如: 1.0.0-release-735586.zip 1.0.0-release-447088.zip 1.0.0-release-436044.zip 1.0.1-patch-480506.zip 1.0.1-patch-968125.zip 1.0.1-patch-532147.zip 应该是 1.0
使用groupby和sortSolution是可以的,但是您能解释第二行中到底发生了什么吗?您正在使用组对象的排序列表扩展列表。reverse=True表示按ASC顺序对它们进行排序。但是[:2]意味着元素0和1?我已经编辑了答案。希望能给我们一些启示;
from itertools import groupby
li = ['1.0.0-release-735586.zip', '1.0.0-release-447088.zip', '1.0.0-release-436044.zip',
'1.0.1-patch-480506.zip', '1.0.1-patch-968125.zip', '1.0.1-patch-532147.zip']
new= []
for key, group in groupby(li, lambda x: x[:-10]):
new.extend(sorted(list(group),reverse=True)[:2])
new
['1.0.0-release-735586.zip',
'1.0.0-release-447088.zip',
'1.0.1-patch-968125.zip',
'1.0.1-patch-532147.zip']