按生日排序姓名和日期列表

1 投票
1 回答
2539 浏览
提问于 2025-04-18 00:16

我有一个文本文件,格式是这样的:

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 个回答

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')

撰写回答