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

Python 如何根据文件名末尾的版本号对文件列表进行排序,python,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', 'ME

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

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_insect.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', 
]
试试这个:
使用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)))

用户能否告诉我,这种方法有什么问题,为什么会被否决?你能再解释一下这个片段吗?我试图应用它,但它不起作用(顺便说一句,我没有否决它)。代码中有NameError。我现在已经改正了!我使用regexp查找单词
.log.num
后面的数字&将其用作对条目排序的键。如果没有编号,则返回空列表。所有这些条目都将被放置在排序列表的开头。是的,它成功了!