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',
]
解决方案
试试这个:
使用正则表达式提取每个条目中 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)))
推荐阅读
- r - 几个变量的所有可能百分比分配
- spring - Spring @PathVariable 冗余?
- firebase - 当应用程序处于后台/终止并收到 FCM 通知时,如何在 Flutter 中显示本地通知?
- javascript - 对通过查询字符串接收到的一串数字进行排序
- python - sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL 约束失败:user.id
- jenkins-pipeline - 脚本管道中地图的选择输入
- sql - 查询以返回表中多个列的查找值
- twilio - 如何在 Webhook 帖子中包含 Twilio 帐户/号码属性作为参数?
- amp-html - amp-分析和 amp-youtube。如何动态跟踪页面上所有视频的播放/停止事件?
- c# - MS Graph Explorer:如何使用 GraphServiceClient 对象获取特定用户的驱动器