首页 > 解决方案 > 如何使用 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

标签: python

解决方案


你的日期是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']

推荐阅读