我有一个映射的文件列表,如下所示:
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',
]
答案 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)))