hil*_*ndj 0 python sorting datetime strftime strptime
这是我的问题的简化版本,但这里是它的要点:我有一个脚本,通过使用Regex查找特定模式来对电子邮件进行排序.我排序的其中一项是收到电子邮件的日期.我使用datetime模块格式化日期字符串,如下所示:
s1 = datetime.strptime(regex_obtained_str, '%B %d, %Y, %I:%M:%S %p').strftime('%m/%d/%Y %I:%M:%S %p')
Run Code Online (Sandbox Code Playgroud)
现在,假设我已经解析了4封电子邮件,这些是来自Regex函数的结果:
s1 = 'March 15, 2013 8:58:34 PM'
s2 = 'March 15, 2013 11:10:10 AM'
s3 = 'March 15, 2013 11:16:06 AM'
s4 = 'April 15, 2013 12:02:04 PM'
Run Code Online (Sandbox Code Playgroud)
在strftime格式化之后变成了这个:
s1 = '03/15/2013 08:58:34 PM'
s2 = '03/15/2013 11:10:10 AM'
s3 = '03/15/2013 11:16:06 AM'
s4 = '04/15/2013 12:02:04 PM'
Run Code Online (Sandbox Code Playgroud)
如果我以随机顺序将这些全部放在列表中并执行sort()函数,如下所示:
L = [s2, s1, s3, s4]
L.sort()
Run Code Online (Sandbox Code Playgroud)
输出是:
['03/15/2013 08:58:34 PM', '03/15/2013 11:10:10 AM', '03/15/2013 11:16:06 AM', '04/15/2013 12:02:04 PM']
Run Code Online (Sandbox Code Playgroud)
如您所见,排序时不会考虑"AM"和"PM".我在StackOverflow上查看了类似的其他几个问题,并且所有这些问题都建议在strptime()/ stftime()函数中将%H更改为%I以计算12小时时钟,但我已经完成了那.任何人都可以建议在排序时如何考虑%p?谢谢!
这里的问题是你正在排序字符串 - Python不知道这些字符串是时间,所以它只是将它们排序为字符串(这恰好工作).
因此,解决方案是,当它们是日期对象时对它们进行排序,此时,Python具有正确排序它们所需的信息:
dates = sorted([datetime.strptime(regex_obtained_str, '%B %d, %Y, %I:%M:%S %p')
for regex_obtained_str in strings])
l = [date.strftime('%m/%d/%Y %I:%M:%S %p') for date in dates]
Run Code Online (Sandbox Code Playgroud)
这里使用列表推导将格式很容易地应用于所有对象.
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |