2012-05-05 16 views
0

我有一個Python 3.2.2程序,並在它是一個列表,是這樣的:如何在Python中將文本日期更改爲編號?

['January 26, 1991', 'February 29, 2012', 'December 10, 2094'] 

不使用一百萬「if」語句,我怎麼可能採取的列表,並將其更改或創建新列表看起來像這樣:

['01261991', '02292012', '12102094'] 

基本上將全日期格式轉換爲mmddyyyy格式?

我已經看過這裏的各種其他問題,似乎無法找到像這樣的人。如果有人能指出我的方向會很棒!

+0

你允許使用標準庫模塊? – dkamins

+0

另外,您的輸出不一致。你想不用逗號? – dkamins

+0

而不是使用if語句使用字典,'{'january':01,'february':02,'march':03 .....}' –

回答

1

如果你不想使用任何modules你可以試試這個:

dates=['January 26, 1991', 'February 29, 2012', 'December 10, 2094'] 
def converter(x): 
    x=x.split() 
    dic={'January':'01','February':'02','March':'03','April':'04','May':'05','June':'06', 
     'July':'07','August':'08','September':'09','October':'10','November':'11','December':'12' 
     } 
    month,day,year=dic[x[0]],x[1][:-1],x[2] 
    if len(day)==1: 
    day='0'+day 

    return month+day+year 

new_lis=[] 

for x in dates: 
    new_lis.append(converter(x)) 

print(new_lis) 

['01261991', '02292012', '12102094'] 
+0

給作業問題提供完整的完成代碼答案並不是很好的形式。此外,你的代碼將在一個月中的任何一天不是兩位數字(它正確地去掉了逗號,但然後給出了一個無效的最終字符串)。 –

+0

感謝您的幫助。 「.split()」函數是真正幫助我的。 – ahabos

+0

@HughBothwell是啊!我錯過了當月的某天是單個數字號的情況,解決方案已修復。對於家庭作業,我沒有看到作業標籤,這就是爲什麼寫完整個解決方案。 –

1

Python至少有兩個模塊用於處理時間。 (第一個是time,第二個是datetime)。具體查看strftimestrptime,它們是從字符串創建「時間對象」,然後從「時間對象」創建字符串的方法。

另請注意,在Python中,列表通常表示爲'[item1,item2,...]'(方括號,不是花括號 - 花括號用於字典...)。

最後,你最終希望的日期字符串不符合同樣的規則,其他2 ...

+0

我認爲作業只是要求在操作字符串時給出。我的意思是 ['1991年1月26日','2012年2月29日','2094年12月10日'] 被硬編碼到程序中。我只需要將其操作爲mmddyyyy格式。我該怎麼做呢?對不起,錯別字。 – ahabos

0

你想strptimestrftime:我覺得p是「過程」和f是格式。

它們都採用格式字符串和參數來根據該字符串進行處理。 str*time函數具有豐富的歷史,可以追溯到C,除了它更好以外,Python與原始函數直接相關。

我說它更好,因爲如果你看strptime and strftime behavior你會發現格式字符串有他們自己的迷你語言,它只是非常不夠直觀,不足以讓你犯嚴重錯誤,難以發現。 (例如,我仍然需要查看分鐘是大寫還是小寫m)。

另外,如果你在Linux上(也許是OSX?)man strptime我發現比python文檔更有幫助。 strftime也是如此。

0

首先,分割字符串轉換成三個部分:

'January 26, 1991'.split() # results in ['January', '26,', '1991'] 

其次,使用字典打開月份名稱變成兩位數字:

months = {'January':'01', 'February':'02'} 
months['January']  # results in '01' 

第三,從當天剝離逗號並確保它是兩位數字。

四,重新組裝月份+日+年以獲得最終結果。第五,將其包裝到函數中,並將函數應用於列表中的每個元素。

1

對於時間操作,您通常應該查看標準庫中的timedatetime模塊。

>>> import time 
>>> raw_string_list = ['January 26, 1991', 'February 29, 2012', 'December 10, 2094'] 
>>> struct_time_list = [time.strptime(raw_string, '%B %d, %Y') for raw_string in raw_string_list] 
>>> final_list = [time.strftime('%m%d%Y', struct_time) for struct_time in struct_time_list] 
>>> final_list 
['01261991', '02292012', '12102094'] 

對於這種情況,我們使用time模塊的2個功能:strptime將字符串轉換回不是time.struct_time和strftime把它放回一個新的字符串。

0

以下Python代碼將完成你的任務:

#! /usr/bin/env python 
from time import strptime, strftime 
input = ['January 26, 1991', 'February 29, 2012', 'December 10, 2094'] 
date_list = [] 
output = [] 

for i in input: 
    date_list.append(strptime(i, '%B %d, %Y')) 

for dd in date_list: 
    output.append(strftime('%m%d%Y', dd)) 
1

我會使用內置的日期時間模塊,具體strptime and strftime。利用map申請轉換功能列表中的每個元素,你可以這樣做:

#!/usr/bin/env python 

from datetime import datetime 

dateList = ['January 26, 1991', 'February 29, 2012', 'December 10, 2094'] 

def convertDate(dateString): 
    dt = datetime.strptime(dateString,"%B %d, %Y") 
    return dt.strftime("%m%d%Y") 

print map(convertDate,dateList) 
+0

我查找了strptime語法很多次,但從未注意到%B – Anthon

相關問題