python - 使用多个分隔符按日期对字符串进行排序
问题描述
我有一个可以使用 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
解决方案
如果您想要的只是最新的,则无需对它们进行排序。为此,您需要能够提取日期,这可以使用正则表达式来完成,并将其用作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))))
推荐阅读
- unit-testing - 如何测试/重构以测试调用 http.ListenAndServe 的函数
- android - 如何使用 Rx2AndroidNetworking 从 json API 缓存内容和数据?
- python - Web-Scraping Python,DataFrame 的索引问题
- r - 在 R 中创建一个真/假变量
- python - Python 退格 (\b) 创建复选标记字符
- php - 除了使用 array_splice 之外,有没有办法从数组中删除某些对象及其值?
- raytracing - 如何解决光线追踪中的反光问题?
- c# - Xamarin:有没有办法区分滑动和底部导航视图点击?
- python - Pandas 单个 iloc 操作中的前 5 行和后 5 行
- javascript - 为什么在此代码中使用“n--”运算符会引发错误?