2016-09-20 3 views
0

Ich importiere eine große CSV-Datei in ETL in eine Datenbank, und das Datumsformat, das ursprünglich in der CSV-Datei festgelegt wurde, sieht aus wie 4/22/2016 1:00:00 PM. Jedes Datum ist Teil einer größeren Liste, in der möglicherweise Elemente vom Typ Nicht-Datum enthalten sind. zum Beispiel:Python konvertieren Zeichenfolge Zeit in SQL-Format Datum

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

Ich mag würde jeden Tag neu zu formatieren (falls vorhanden in der Liste) mit dem richtigen MySQL Format

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

Wie würde ich tue dies mit einem Liste Verständnis ? Mein Code funktioniert aus offensichtlichen Gründen nicht, aber ich bin mir nicht sicher, wohin ich von hier aus gehen soll. Ich muss den Index behalten, dass das Datum in v gefunden wird.

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) 

Antwort

2

Bitte überprüfen Sie dies. Kommentare inline mit Code.

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) 

Ausgang:

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> 

Code mit Liste Verständnis:

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) 

Ausgang:

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 - Bitte lassen Sie mich wissen, wenn Sie weitere Informationen wünschen. –

+0

Vielen Dank für Ihre Einreichung. Meine aktuelle Liste, mit der ich arbeite, ist viel größer (17 Elemente), und ich möchte dies möglichst mit einem Listenverständnis erreichen, anstatt jeden Index anzugeben, der geändert werden muss. Ich habe die obige Frage aktualisiert, um dieses Problem zu beheben. – dobbs

+0

@dobbs - Bitte überprüfen Sie die aktualisierte Antwort. –

Verwandte Themen