首页 > 解决方案 > 如何根据文件名末尾的版本号对文件列表进行排序

问题描述

我有一个映射如下的文件列表:

files = os.listdir(os.getcwd())

[
'MESSAGEHUB_INGEST.log.5', 
'MESSAGEHUB_INGEST.log.2', 
'MESSAGEHUB_INGEST.log.3', 
'MESSAGEHUB_INGEST.log.4', 
'MESSAGEHUB_INGEST.log.10', 
'MESSAGEHUB_INGEST.log.1', 
'MESSAGEHUB_INGEST.log.6', 
'MESSAGEHUB_INGEST.log.7', 
'MESSAGEHUB_INGEST.log'
]

当我尝试对其进行排序时,files.sort()我得到了这个:

[
'MESSAGEHUB_INGEST.log', 
'MESSAGEHUB_INGEST.log.1', 
'MESSAGEHUB_INGEST.log.10', 
'MESSAGEHUB_INGEST.log.2', 
'MESSAGEHUB_INGEST.log.3', 
'MESSAGEHUB_INGEST.log.4', 
'MESSAGEHUB_INGEST.log.5', 
'MESSAGEHUB_INGEST.log.6', 
'MESSAGEHUB_INGEST.log.7'
]

请注意,文件MESSAGEHUB_INGEST.log.10位于列表的第 3 位。

如何正确排序此列表以使其顺序正确?

[
'MESSAGEHUB_INGEST.log', 
'MESSAGEHUB_INGEST.log.1', 
'MESSAGEHUB_INGEST.log.2', 
'MESSAGEHUB_INGEST.log.3', 
'MESSAGEHUB_INGEST.log.4', 
'MESSAGEHUB_INGEST.log.5', 
'MESSAGEHUB_INGEST.log.6', 
'MESSAGEHUB_INGEST.log.7',
'MESSAGEHUB_INGEST.log.10', 
]

标签: python

解决方案


试试这个:
使用正则表达式提取每个条目中 log 后面的数字。如果re.findall返回一个空列表,则return -1,使其在排序列表中获得最高优先级。

import re
def fun(x):
    li = re.findall(r'.log.([0-9]*)',x)
    if li:
        return int(li[0])
    else:
        return -1

print(sorted(li,key= lambda x: fun(x)))

推荐阅读