2016-09-20 92 views
0

我正在將大型csv文件導入ETL到數據庫中,並且最初在csv文件中設置的日期格式看起來像4/22/2016 1:00:00 PM。每個日期都是可能包含非日期類型項目的較大列表的一部分。例如:python將字符串時間轉換爲sql日期時間格式

v = ['4/29/2016 8:25:58 AM', '5/25/2016 2:22:22 PM', 'True', 'Foo', 1] 

我想要重新每次約會(如果出現在列表中)與

%m-%d-%Y %I:%M:%S

正確的MySQL的格式如何,我會做到這一點有列表理解 ?我的代碼不工作的原因很明顯,但我不知道從哪裏去。我需要保留在v中找到日期的索引。

from datetime import datetime, date, time 

v = ['4/29/2016 8:25:58 AM', '5/25/2016 2:22:22 PM', 'True', 'Foo', 1] 


def fixdate(_params): 
     tstamp = datetime.strptime(_params, "%m/%d/%Y %I:%M:%S %p") 
     newtstamp = date.strftime(tstamp, "%m-%d-%Y %I:%M:%S") 
     replace = { _params: newtstamp } 
     l = [replace.get(x, x) for x in _params] 
     print l 


fixdate(v) 

回答

2

請檢查。 評論內嵌代碼。

from datetime import datetime 

v = ['4/29/2016 8:25:58 AM', '5/25/2016 2:22:22 PM', 'True', 'Foo', 1] 

def fixdate(_params): 

     print "Before changing format ..." 
     print _params 
     #First date in list 
     tstamp = datetime.strptime(_params[0], "%m/%d/%Y %I:%M:%S %p") 
     #Add %p after %S if AM or PM is required 
     newtstamp = datetime.strftime(tstamp, "%m-%d-%Y %I:%M:%S") 
     #Update the element in list 
     _params[0] = newtstamp 

     #Second date in list 
     tstamp = datetime.strptime(_params[1], "%m/%d/%Y %I:%M:%S %p") 
     newtstamp = datetime.strftime(tstamp, "%m-%d-%Y %I:%M:%S") 
     #Update the element in list 
     _params[1] = newtstamp 

     print "After changing format..." 
     print _params 

fixdate(v) 

輸出:

C:\Users\dinesh_pundkar\Desktop>python c.py 
Before changing format ... 
['4/29/2016 8:25:58 AM', '5/25/2016 2:22:22 PM', 'True', 'Foo', 1] 
After changing format... 
['04-29-2016 08:25:58', '05-25-2016 02:22:22', 'True', 'Foo', 1] 

C:\Users\dinesh_pundkar\Desktop> 

代碼列表理解:

from datetime import datetime 

v = ['4/29/2016 8:25:58 AM', '5/25/2016 2:22:22 PM', 'True', 'Foo', 1] 

def fixdate(_params): 

     print "Before changing format ..." 
     print _params 

     _params = [i if ':' not in str(i) and '/' not in str(i) else datetime.strftime(datetime.strptime(i, "%m/%d/%Y %I:%M:%S %p"), "%m-%d-%Y %I:%M:%S") for i in _params] 

     print "After changing format..." 
     print _params 

fixdate(v) 

輸出:

C:\Users\dinesh_pundkar\Desktop>python c.py 
Before changing format ... 
['4/29/2016 8:25:58 AM', '5/25/2016 2:22:22 PM', 'True', 'Foo', 1] 
After changing format... 
['04-29-2016 08:25:58', '05-25-2016 02:22:22', 'True', 'Foo', 1] 

C:\Users\dinesh_pundkar\Desktop> 
+0

@dobbs - 請讓我知道,如果你想任何其他信息。 –

+0

感謝您的提交。我正在使用的實際列表要多得多(17個元素),並且如果可能,我希望通過列表理解來完成此操作,而不是指定每個需要修改的索引。我更新了上述問題以解決此問題 – dobbs

+0

@dobbs - 請檢查更新後的答案。 –

相關問題