Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对文件夹中的文件进行排序_Python_Sorting - Fatal编程技术网

Python 对文件夹中的文件进行排序

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

我需要清理我的归档文件夹,以便只保留按版本类型和版本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]完成的


使用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']