Daten vom Typ Wörterbuch werden häufig mit json und Python ausgetauscht, aber der Wert des Wörterbuchs bleibt bis zum Datum / Uhrzeit erhalten. Wenn Sie eine Zeichenfolge oder Datei erstellen, wird "JJJJ-MM-TT HH-MN-SS" angezeigt. Notieren Sie sich, wie Sie mit der Zeichenfolge
umgehen sollen.
Es kann sich um eine Zeichenfolge mit einer Funktion namens isoformat für datetime handeln. Ich werde das Trennzeichen leer lassen.
In [1]: from datetime import datetime
In [2]: t1 = datetime.now()
In [3]: t1.isoformat()
Out[3]: '2020-05-08T22:16:39.287433'
In [4]: t1.isoformat(" ")
Out[4]: '2020-05-08 22:16:39.287433'
Sie können auch mehr Zeit verwenden.
In [5]: t1.strftime("%Y/%m/%d %H:%M:%S.%f")
Out[5]: '2020/05/08 22:16:39.287433'
Verwenden Sie umgekehrt stfptime, um eine Zeichenfolge in datetime zu konvertieren.
In [6]: t2 = datetime.strptime("2020-01-02 20:03:12.345678", "%Y-%m-%d %H:%M:%S.%f")
In [7]: t2
Out[7]: datetime.datetime(2020, 1, 2, 20, 3, 12, 345678)
Ich verwende json.dump und json.dumps, aber zu diesem Zeitpunkt kann ich eine Funktion als Argument auf Standard setzen und datetime in die gewünschte Zeichenfolge in dieser Funktion konvertieren. Unten aus "JSON Encoder and Decoder":
Wenn Sie> default angeben, geben Sie eine Funktion an. Diese Funktion wird für Objekte aufgerufen, die ansonsten nicht serialisiert werden können. Die Funktion muss das Objekt in einer JSON-codierten Version zurückgeben oder einen TypeError auslösen. Wenn nicht angegeben, wird TypeError ausgelöst.
Es scheint richtig, TypeError aufzunehmen.
import json
from datetime import datetime, date
def default(o):
if hasattr(o, "isoformat"):
return o.isoformat()
else:
return str(o)
#Erstellen Sie ein Wörterbuch und legen Sie die aktuelle Uhrzeit als Wert fest.
dict1 = {"time1": datetime.now(), "time2": datetime.now()}
print( "dict1={}".format(dict1))
print( "str(dict1)={}".format(str(dict1)) )
#Exportieren Sie das Wörterbuch
s_dict1 = json.dumps(dict1, default=default)
print( "s_dict1={}".format(s_dict1) )
Das Ausführungsergebnis ist wie folgt.
dict1={'time1': datetime.datetime(2020, 5, 8, 22, 57, 18, 564149), 'time2': datetime.datetime(2020, 5, 8, 22, 57, 18, 564163)}
str(dict1)={'time1': datetime.datetime(2020, 5, 8, 22, 57, 18, 564149), 'time2': datetime.datetime(2020, 5, 8, 22, 57, 18, 564163)}
s_dict1={"time1": "2020-05-08 22:57:18.564149", "time2": "2020-05-08 22:57:18.564163"}
Es ist eine richtige Zeichenkette. Bei der Implementierung der Standardfunktion wird isoformat überprüft, ob es sich um `hasattr``` handelt, aber zum Beispiel`
isinstance (o, (Datum / Uhrzeit, Datum)) `oder` `Typ (o) .__ name__ == Sie können auch "datetime"
`usw. verwenden.
Verwenden Sie zum Lesen json.load. Hier können mit object_hook benutzerdefinierte Lesevorgänge eingestellt werden.
object_hook ist eine optionale Funktion, die für das Ergebnis (dict) eines zu decodierenden Objektliteral aufgerufen wird. Der Rückgabewert von object_hook wird anstelle von dict verwendet. Mit dieser Funktion können Sie Ihren eigenen Decoder implementieren (z. B. Hinweise auf JSON-RPC-Klassen).
def object_hook(obj):
new_dic = dict()
for o in obj:
try:
new_dic[str(o)] = datetime.strptime(obj[o], '%Y-%m-%d %H:%M:%S.%f')
except TypeError:
new_dic[str(o)] = obj[o]
pass
return new_dic
s_dic = """{"time1": "2020-05-08 22:57:18.564149", "time2": "2020-05-08 22:57:18.564163"}"""
print( "s_dic={}".format(s_dic) )
dic = json.loads(s_dic, object_hook=object_hook)
print( "dic={}".format(dic) )
Das Ausführungsergebnis ist wie folgt.
s_dic={"time1": "2020-05-08 22:57:18.564149", "time2": "2020-05-08 22:57:18.564163"}
dic={'time1': datetime.datetime(2020, 5, 8, 22, 57, 18, 564149), 'time2': datetime.datetime(2020, 5, 8, 22, 57, 18, 564163)}
Es ist richtig datetime.datetime.
Jetzt, wo ich die gewünschte Implementierung habe, habe ich den Tag überlebt.
(2020/05/08)
»Was ist danach? Was früher von float64 geladen wurde, ist jetzt str. Ich war in Schwierigkeiten. (2020/05/12)
Recommended Posts