如何使用Python按反向时间顺序对datemonthyear进行排序

时间:2013-08-13 09:41:41

标签: python sorting

我的文件夹名为29Jun2011,12Aug2013,31Jan2013,08Aug1985。我必须使用Python脚本来排序反向时间顺序。我必须在变量中存储最新的一个并打印出来。

2 个答案:

答案 0 :(得分:1)

import datetime as dt

date_strs = [
    "29Jun2011",
    "08Aug1985",
    "12Aug2013",
]

my_format = "%d%b%Y"

datetime_objs = []

for date_str in date_strs:
    my_datetime = dt.datetime.strptime(date_str, my_format)
    datetime_objs.append(my_datetime)

print datetime_objs
datetime_objs.sort(reverse=True)
print datetime_objs
print datetime_objs[0].strftime("%B %d, %Y")


--output:--
[datetime.datetime(2011, 6, 29, 0, 0), datetime.datetime(1985, 8, 8, 0, 0), datetime.datetime(2013, 8, 12, 0, 0)]
[datetime.datetime(2013, 8, 12, 0, 0), datetime.datetime(2011, 6, 29, 0, 0), datetime.datetime(1985, 8, 8, 0, 0)]
August 12, 2013

答案 1 :(得分:0)

如果您可以更改文件夹的名称,请使用ISO-8601日期格式,即YYYY-MM-DD;您可以使用标准ASCII排序规则对它们进行排序;)

如果无法做到,可以使用

进行排序
import time

def sortkey(s):
    return time.strptime(s, '%d%b%Y')

names = sorted(unsorted_names, key=sortkey)

但是,如果您只需要最新的,那么您只需要最大值:

def sortkey(s):
    return time.strptime(s, '%d%b%Y')

date, filename = max((sortkey(i), i) for i in unsorted_names)
print date, filename

这要快得多。一般来说,如果你的问题是“找到最大值”,你不想使用sort;如果只需要最大值,请使用max()函数;如果需要n个值,请使用heapq.nlargest