从lis中的一组类似文件中获取最高版本的文件

2024-10-01 07:34:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种从不同的文件名列表中返回最高版本文件列表的方法。文件名格式中唯一的常量是它们共享相同的版本格式。一份样本清单将是:

mylist = ["File_01_v001", "File_01_v002", "File_01_v003", "File_01-test_v001", "File_01-test_v002", "File_01_v002", "File_02_v001", "File_02_v002", "File_02_v003"]

我从这个示例列表返回的结果如下所示:

['File_01_v003', 'File_01-test_v002', 'File_02_v003']

谢谢


Tags: 文件方法test版本示例列表文件名格式
2条回答

我会循环浏览这些条目,编一本字典,查找最新的条目。只保留最新的,然后再转换回列表

mylist = ["File_01_v001", "File_01_v002", "File_01_v003", "File_01-test_v001", "File_01-test_v002", "File_01_v002", "File_02_v001", "File_02_v002", "File_02_v003"]

def findFiles(li):
    di = {}
    for item in li:
        parts = item.split("_")
        fileName = "_".join(parts[:-1])
        version = parts[-1]
        if (fileName not in di or di[fileName] < version):
            di[fileName] = version
    return [k + "_" + di[k] for k in di]

print(findFiles(mylist))

我认为我把它弄得太复杂了,但它是有效的:)

import re
mylist = ["File_01_v001", "File_01_v002", "File_01_v003", "File_01-test_v001", "File_01-test_v002", "File_01_v002", "File_02_v001", "File_02_v002", "File_02_v003"]
versions = {k: list(sorted([item.split('_')[2] for item in mylist if item.startswith(k)], key = lambda x: re.findall('\d+',x)[0]))[-1] for k in set(['_'.join(item.split('_')[:2]) for item in mylist])}
list_versions = ['_'.join(vers) for vers in versions.items()]

相关问题 更多 >