2014-03-28 83 views
1

名字和日期的名單上有以下格式的文本文件:排序根據生日

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上讀取的名稱和分數。然而,有一個日期而不是一個分數已經出現了問題。我一直在閱讀有關日期時間模塊,並試圖根據生日元素進行排序,但我似乎無法使其工作。

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

'線= line.strip()' – sshashank124

回答

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

謝謝arulmr,這是生日的所需顯示的格式我在之後。那是我的下一個問題。 – user3469515