按生日排序姓名和日期列表
我有一个文本文件,格式是这样的:
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')