根据生日排序名称和日期列表

时间:2014-03-28 06:04:30

标签: python list sorting date datetime

我有一个这种格式的文本文件:

Robert, 03/07/1960
Michael, 24/11/1942
Simon, 14/08/1924
Sarah, 20/07/1935
Adam, 12/09/1944
Rachael, 24/09/1919

因为名字和生日用逗号分隔,每个人都有一个新行。 使用IDLE我想打印文本文件,并按出生日期列出最早到最年轻。

我修改了最初用于排序我在stackoverflow上读取的名称和分数的代码。但是,使用日期而不是分数会出现问题。我一直在阅读有关datetime模块的内容,并且一直在尝试根据生日元素进行排序,但我似乎无法使其正常工作。

import datetime
format = '%d/%m/%Y'

dates = []
with open("namedate.txt") as f:
    for line in f:
        line.strip()
        name, date = line.split(',')
        date = datetime.datetime.strptime(date, format)
        dates.append((name, date))

dates.sort(key=lambda s: s[1])

for name, date in dates:
    print(name, date)

我收到此错误:

ValueError: time data ' 03/07/1960\n' does not match format '%d/%m/%Y'

所以我需要削减' \ n'超出生日元素,但不能使它工作。

1 个答案:

答案 0 :(得分:2)

功能是:

import datetime
format = '%d/%m/%Y'

dates = []
with open("namedate.txt") as f:
    for line in f:
        line = line.strip()
        name, date = line.split(',')
        date = datetime.datetime.strptime(date.strip(), format)
        dates.append((name, date))

dates.sort(key=lambda s: s[1])

for name, date in dates:
    print(name, date.strftime(format))

输出将是:

('Rachael', '24/09/1919')
('Simon', '14/08/1924')
('Sarah', '20/07/1935')
('Michael', '24/11/1942')
('Adam', '12/09/1944')
('Robert', '03/07/1960')