2016-06-29 4 views
3

Ich habe ein Array von ints, die Ich mag würde bisher artige Objekte konvertieren:Konvertieren ein Array von ints to Date-Objekte

[[19480916 19480901 19480917 19480901 19480901 19481019] 
[19480917 19480916 19481019 19480922 19480922 19490902] 
[19481004 19480917 19481021 19480924 19481004 19501124]] 

Ich habe den folgenden Code, die angeblich durch das Array iterieren und konvertieren jede Zahl in einem Date-Objekt und fügen sie ihn an eine neue Liste:

Date_List = [] 
from datetime import date, datetime, timedelta 
for s in myArray: 
    date1 = datetime(year=int(s[0:4]), month=int(s[4:6]), day=int(s[6:8])) 
    Date_List.append(date1) 

Als ich das laufen lasse, erhalte ich folgende Fehlermeldung:

TypeError: only length-1 arrays can be converted to Python scalars. 

Gibt es einen Weg, wo ich das machen kann?

Antwort

4

Verwenden str() jede der Zahlen zu Zeichenfolge konvertieren und strptime() eine Zeichenfolge in ein datetime Objekt zu laden:

from datetime import datetime 

l = [ 
    [19480916, 19480901, 19480917, 19480901, 19480901, 19481019], 
    [19480917, 19480916, 19481019, 19480922, 19480922, 19490902], 
    [19481004, 19480917, 19481021, 19480924, 19481004, 19501124] 
] 

for sublist in l: 
    print([datetime.strptime(str(item), "%Y%m%d") for item in sublist]) 

Drucke:

[datetime.datetime(1948, 9, 16, 0, 0), datetime.datetime(1948, 9, 1, 0, 0), datetime.datetime(1948, 9, 17, 0, 0), datetime.datetime(1948, 9, 1, 0, 0), datetime.datetime(1948, 9, 1, 0, 0), datetime.datetime(1948, 10, 19, 0, 0)] 
[datetime.datetime(1948, 9, 17, 0, 0), datetime.datetime(1948, 9, 16, 0, 0), datetime.datetime(1948, 10, 19, 0, 0), datetime.datetime(1948, 9, 22, 0, 0), datetime.datetime(1948, 9, 22, 0, 0), datetime.datetime(1949, 9, 2, 0, 0)] 
[datetime.datetime(1948, 10, 4, 0, 0), datetime.datetime(1948, 9, 17, 0, 0), datetime.datetime(1948, 10, 21, 0, 0), datetime.datetime(1948, 9, 24, 0, 0), datetime.datetime(1948, 10, 4, 0, 0), datetime.datetime(1950, 11, 24, 0, 0)] 
+0

ich das versucht, und ich endete up einen Fehler bekommen, der nicht gelöst werden kann, egal was: 'für Unterliste in l: für Artikel in Unterliste: print ([Datum (int (Element), '% Y% m% d')]) würde immer TypeError ergeben: eine Ganzzahl ist erforderlich (hat Typ str). Ich habe auch "date" anstelle von datetime.strptime verwendet, da die Zeit für das, was ich mache, irrelevant ist. – CyclonicLife

+0

@CyclonicLife Entschuldigung, ich sehe nicht, dass Sie das verwenden, was ich vorgeschlagen habe. – alecxe

2

Der Grund, es funktioniert nicht, weil erstens ist alles, was Sie versuchen, ein Stück der Liste als Parameter zu datetime()

in Ihrem zu übergeben Schleife, for s in myArray, jede Iteration von s sah etwa so aus: [19480916, 19480901, 19480917, 19480901, 19480901, 19481019]

Also, wenn Sie in s[0:4] vorbei versucht, Sie waren tatsächlich [19480916, 19480901, 19480917, 19480901] in die datetime(year: int) Parameter und so weiter setzen.

Wenn Sie beginnen, über jede Zahl in dem Array zu iterieren, das Sie zuvor versucht haben, zu übergeben, ist das nächste Problem, dass Ganzzahlen nicht geschnitten werden können, so müssen Sie jede Datumsstring in eine str vor dem Schneiden und dann werfen zu einem int wie du warst.

Siehe mein Beispiel:

myArray = [[19480916, 19480901, 19480917, 19480901, 19480901, 19481019], 
      [19480917, 19480916, 19481019, 19480922, 19480922, 19490902], 
      [19481004, 19480917, 19481021, 19480924, 19481004, 19501124]] 

Date_List = [] 
for array in myArray: 
    for string in array: 
     s = str(string) 
     date1 = datetime(year=int(s[0:4]), month=int(s[4:6]), day=int(s[6:8])) 
     Date_List.append(date1) 

und die Ausgabe, die ich bekomme:

>>> from pprint import pprint 
>>> pprint(Date_List) 
[datetime.datetime(1948, 9, 16, 0, 0), 
datetime.datetime(1948, 9, 1, 0, 0), 
datetime.datetime(1948, 9, 17, 0, 0), 
datetime.datetime(1948, 9, 1, 0, 0), 
datetime.datetime(1948, 9, 1, 0, 0), 
datetime.datetime(1948, 10, 19, 0, 0), 
datetime.datetime(1948, 9, 17, 0, 0), 
datetime.datetime(1948, 9, 16, 0, 0), 
datetime.datetime(1948, 10, 19, 0, 0), 
datetime.datetime(1948, 9, 22, 0, 0), 
datetime.datetime(1948, 9, 22, 0, 0), 
datetime.datetime(1949, 9, 2, 0, 0), 
datetime.datetime(1948, 10, 4, 0, 0), 
datetime.datetime(1948, 9, 17, 0, 0), 
datetime.datetime(1948, 10, 21, 0, 0), 
datetime.datetime(1948, 9, 24, 0, 0), 
datetime.datetime(1948, 10, 4, 0, 0), 
datetime.datetime(1950, 11, 24, 0, 0)] 

die auch im String-Format gedruckt werden kann:

>>> pprint([str(d) for d in Date_List]) 
['1948-09-16 00:00:00', 
'1948-09-01 00:00:00', 
'1948-09-17 00:00:00', 
'1948-09-01 00:00:00', 
'1948-09-01 00:00:00', 
'1948-10-19 00:00:00', 
'1948-09-17 00:00:00', 
'1948-09-16 00:00:00', 
'1948-10-19 00:00:00', 
'1948-09-22 00:00:00', 
'1948-09-22 00:00:00', 
'1949-09-02 00:00:00', 
'1948-10-04 00:00:00', 
'1948-09-17 00:00:00', 
'1948-10-21 00:00:00', 
'1948-09-24 00:00:00', 
'1948-10-04 00:00:00', 
'1950-11-24 00:00:00']