如何根据文件名末尾的版本号对文件列表进行排序

时间:2019-02-04 02:25:36

标签: python

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

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

1 个答案:

答案 0 :(得分:-1)

尝试一下:
使用regexp提取每个条目中单词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)))