Python中包含日期的字符串排序



此代码排序日期没有任何问题。如果我添加任何字符串到my_dates变量,我们可以类似地排序吗?分割字符串是唯一的方法还是其他选择?

如:my_dates =[‘a_05112018.zip’,‘a_25032017.zip’,‘a_01112018.zip’,‘a_07012017.zip]

from datetime import datetime
import re
pattern='Anyfile_<ddmmyyyy>.zip'
my_dates = ['05112018', '25032017', '01112018', '07012017']
result = re.search("<([dmy]{8,})>", pattern, flags=re.IGNORECASE)
if result:
date_pattern = result.group(1)
date_pattern = re.sub("dd", "%d", date_pattern, flags=re.IGNORECASE)
date_pattern = re.sub("mmm", "%b", date_pattern, flags=re.IGNORECASE)
date_pattern = re.sub("mm", "%m", date_pattern, flags=re.IGNORECASE)
date_pattern = re.sub("yyyy", "%Y", date_pattern, flags=re.IGNORECASE)
my_dates.sort(key=lambda date: datetime.strptime(date, date_pattern))
print(my_dates)

你不需要分割文本。datetime模块可以很好地处理字符串到日期的转换。参见:将字符串转换为日期时间

text = 'a_25032017.zip'
datetime.strptime(text, 'a_%d%m%Y.zip') # This is valid
# datetime.datetime(2017, 3, 25, 0, 0)

一旦你把所有的列表转换成DateTime对象,你就可以按照你想要的方式对它们进行排序。

尝试:

import re
my_dates = [
"a_05112018.zip",
"a_25032017.zip",
"a_01112018.zip",
"a_07012017.zip",
]

def sort_func(value):
dd, mm, yyyy = re.search(r"_(d{2})(d{2})(d{4}).zip", value).groups()
return yyyy, mm, dd

my_dates = sorted(my_dates, key=sort_func)
print(my_dates)

打印:

['a_07012017.zip', 'a_25032017.zip', 'a_01112018.zip', 'a_05112018.zip']

最新更新