首页 > 解决方案 > 使用多个分隔符按日期对字符串进行排序

问题描述

我有一个可以使用 glob 命令找到的文件列表。文件名的前缀由用户更改(不是固定格式),但文件名中有日期。我想按日期排序并返回最新的。如果排序后有多个相同日期的文件,则按最后一串数字排序。

我在 slackoverflow 上查找了一些示例。这个例子有最接近的解决方案。在 python 中按日期和字符串排序。但是,我有多个 _ 分隔符,这使得多次拆分字符串效率低下。此外,用户可能会使用多个 _ 分隔符。我正在寻找一种更好的解决方案来提取字符串的最后一部分,因为它是固定格式并且不受用户输入前缀的影响。

文件名列表:

file_v1__2019-07-01-090001.dat
file_v1__2019-07-01-090201.dat
file_v1__2019-06-01-092301.dat
file_v1__2019-06-01-091001.dat
file_v1__2019-06-02-091021.dat

标签: python

解决方案


如果您想要的只是最新的,则无需对它们进行排序。为此,您需要能够提取日期,这可以使用正则表达式来完成,并将其用作key内置max()函数的参数。

import re

files = '''
file_v1__2019-07-01-090001.dat
file_v1__2019-07-01-090201.dat
file_v1__2019-06-01-092301.dat
file_v1__2019-06-01-091001.dat
file_v1__2019-06-02-091021.dat
'''.split()

regex = re.compile(r'\d{4}-\d{2}-\d{2}-\d{6}') # XXXX-XX-XX-XXXXXX Date pattern

print(max(files, key=lambda file:(regex.search(file).group(0))))

推荐阅读