首页 > 解决方案 > 如何在python中对日期进行排序?

问题描述

我试图对列表中的日期进行排序,但日期在字符串元素之后[EQUIP-X]。首先使用正则表达式,取唯一的日期并尝试排序。它不起作用!

我想拆分字符串[EQUIP-X]Date.

files = [filename for root, dirs, files in os.walk(path) for filename in files for date in dateList if filename.endswith(date+".log")]
for item in files:
 reg = re.search(r"(.+]).(\d{2}.\d{2}.\d{4})",item)
 equip = reg.group(1)
 data = reg.group(2)
 namefile = data+'.'+equip 
 print item

示例字符串:

[EQUIP-4].02.05.2019.log
[EQUIP-2].01.05.2019.log
[EQUIP-1].30.04.2019.log
[EQUIP-3].29.04.2019.log
[EQUIP-1].01.05.2019.log
[EQUIP-5].30.04.2019.log
[EQUIP-1].29.04.2019.log
[EQUIP-5].30.04.2019.log
[EQUIP-3].30.04.2019.log
[EQUIP-1].29.04.2019.log
[EQUIP-2].02.05.2019.log

在本教程之后,一旦我不操作“日期”而是“str”,“str”对象就没有属性“sort”。更好的方法是什么?这个想法是拆分和处理日期,然后加入所有

标签: pythonregexsortingdatepython-2.x

解决方案


您可以根据字符串的结尾减去最后 4 个字符(文件扩展名)作为日期进行排序。由于日期格式是零填充的,因此它应该总是 10 个字符长,因此字符串拼接从 -14 开始(日期为 10,扩展为 4)

from datetime import datetime

files = ['[EQUIP-4].02.05.2019.log',
'[EQUIP-2].01.05.2019.log',
'[EQUIP-1].30.04.2019.log',
'[EQUIP-3].29.04.2019.log',
'[EQUIP-1].01.05.2019.log',
'[EQUIP-5].30.04.2019.log',
'[EQUIP-1].29.04.2019.log',
'[EQUIP-5].30.04.2019.log',
'[EQUIP-3].30.04.2019.log',
'[EQUIP-1].29.04.2019.log',
'[EQUIP-2].02.05.2019.log']

files.sort(key=lambda x: datetime.strptime(x[-14:-4], '%d.%m.%Y'))
print(files)
['[EQUIP-3].29.04.2019.log',
'[EQUIP-1].29.04.2019.log',
'[EQUIP-1].29.04.2019.log',
'[EQUIP-1].30.04.2019.log',
'[EQUIP-5].30.04.2019.log',
'[EQUIP-5].30.04.2019.log',
'[EQUIP-3].30.04.2019.log',
'[EQUIP-2].01.05.2019.log',
'[EQUIP-1].01.05.2019.log',
'[EQUIP-4].02.05.2019.log',
'[EQUIP-2].02.05.2019.log']

推荐阅读