python - 如何使用 Python 对列表中的日期进行排序
问题描述
此列表由 组织day.month.year
。在我的列表之前是一个前缀。例如:
[Objname].01.02.2020.log
。我使用正则表达式(\[Obj.*]).(\d{2}.\d{2}.\d{4})
将 ObjectName 与日期分开。这是结果:
01.02.2020
02.02.2020
03.02.2020
04.02.2020
05.02.2020
06.02.2020
07.02.2020
08.02.2020
09.02.2020
10.02.2020
11.02.2020
12.02.2020
13.02.2020
14.02.2020
15.02.2020
16.02.2020
17.02.2020
18.02.2020
19.02.2020
20.02.2020
21.02.2020
22.02.2020
23.02.2020
24.02.2020
25.02.2020
26.02.2020
27.02.2020
29.01.2020
30.01.2020
31.01.2020
我sorted()
之所以使用 Objectname 是因为 Objectname 是由数字组成的,并且我需要返回已排序的这些文件。但我不知道如何处理这个问题的最佳方法。
def getFiles(numbers):
currentDay = datetime.datetime.now()
numdays = numbers
dateList = []
for x in range (0, numdays):
date = currentDay - datetime.timedelta(days = x)
days = date.strftime("%d.%m.%Y")
dateList.append(days)
path = "/var/log/"
files = sorted([filename for root, dirs, files in os.walk(path)
for filename in files
for date in dateList
if filename.endswith(date+".log")])
return files
解决方案
你的日期是dd.mm.yyyy
有序的,你想按yyyy.mm.dd
顺序排列它们;因此您可以使用key
拆分.
和反转组件的功能。
>>> date_strings = ['01.01.2009', '04.07.2007', '05.06.2007', '06.06.2007']
>>> sorted(date_strings, key=lambda d: d.split('.')[::-1])
['05.06.2007', '06.06.2007', '04.07.2007', '01.01.2009']
推荐阅读
- google-apps-script - 计划的 BigQuery 作业中的动态表和数据集
- android - 为什么在 gradle:3.2.1 上出现未知属性“bundleRelease”错误?
- was - WSVR0652W: 线程池“WebContainer”的大小已达到其最大值的 80%
- facebook - 在 Facebook 时间轴上分享照片而不是个人资料图片:Android
- java - 使用 Java 11 玩 2.2.2
- python-3.x - 当尝试运行 tf.confusion 矩阵时,它给出了序列结束错误
- typescript - Typescript - 导出子类型的映射
- c# - 如何使用单个函数来保存具有不同参数的多个函数(针对 HttpClient)
- django - .DATABASES 配置不正确。请提供 ENGINE 值
- php - Angular 6 应用程序如何在 wamp 上本地提供它以及如何将丢失的文件导入索引页面