2017-04-18 79 views
0

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

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

谢谢!

回答

2

我会遍历项目,建立一个字典,找到最新的。只有最新的信息被保存下来,然后再转换回alist。

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)) 
+0

我没有考虑使用字典。谢谢! – Berkyjay

1

我认为我做了它太复杂了,但它的工作原理:)

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()] 
+0

不太复杂。这只是在一行中,这是我的代码自动取款机中的一种需要。 :) – Berkyjay

+0

很高兴你喜欢它:) – zipa