[Python3] Lesen und Schreiben mit datetime isoformat mit json

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.

datetime <-> Zeichenfolge

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)

Machen Sie das Wörterbuch zu einer Zeichenfolge (json)

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.

Wörterbuch aus Zeichenkette (json)

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.

Andere

Jetzt, wo ich die gewünschte Implementierung habe, habe ich den Tag überlebt.

(2020/05/08)

Bemerkungen

»Was ist danach? Was früher von float64 geladen wurde, ist jetzt str. Ich war in Schwierigkeiten. (2020/05/12)

Recommended Posts

[Python3] Lesen und Schreiben mit datetime isoformat mit json
Lesen und schreiben Sie JSON-Dateien mit Python
Lesen Sie JSON mit Python und geben Sie CSV aus
Lesen von JSON-Daten mit Python
Lesen und Schreiben von Dateien mit Slackbot ~ Bot-Entwicklung mit Python ~
Lesen Sie die json-Datei mit Python, formatieren Sie sie und geben Sie json aus
JSON-Codierung und -Decodierung mit Python
Lesen und Schreiben von CSV-Dateien mit Numpy
Lesen und Schreiben von JSON-Dateien mit Python
[Python] Verwenden Sie JSON mit Python
Extrahieren Sie "Nur aktuelles Datum" und "Aktuelles Datum und Uhrzeit" mit Python datetime.
Lesen und analysieren Sie den Datensatz im Arff-Format mit python scipy.io
Analysieren und visualisieren Sie JSON (Webanwendung ⑤ mit Python + Flask)
Lesen und Schreiben von Gleitkommazahlen mit einfacher Genauigkeit in Python
Lesen und schreiben Sie NFC-Tags mit Python mit PaSoRi
Datum / Uhrzeit und Schreiben und Sichern von Dateien
Programmieren mit Python und Tkinter
CSV-Datei lesen und schreiben
Ver- und Entschlüsselung mit Python
Lesen Sie CSV mit Python-Pandas
Python und Hardware-Verwenden von RS232C mit Python-
POST json mit Python 3-Skript
Dateien lesen und schreiben
Informationen zu Python-Datums- und Zeitzone
Schreiben wir Python mitinema4d.
Dateien schreiben und lesen
Schreiben Sie mit Python in csv
Python mit Pyenv und Venv
Formatieren Sie json mit Vim (mit Python)
Funktioniert mit Python und R.
[Python] Lesen Sie die CSV-Datei und zeigen Sie die Abbildung mit matplotlib an
[Python] Verwenden Sie diese Option, um WAV-Dateien zu lesen und zu schreiben. [WAVIO]
Beispiel für das Parsen von HTTP GET und JSON mit Pfefferpython
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Leuchtendes Leben mit Python und OpenCV
Roboter läuft mit Arduino und Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Neuronales Netzwerk mit OpenCV 3 und Python 3
AM-Modulation und Demodulation mit Python
Scraping mit Node, Ruby und Python
Schreiben Sie ein JSON-Schema mit Python DSL
[Python] Mit Python in eine CSV-Datei schreiben
Scraping mit Python, Selen und Chromedriver
Kratzen mit Python und schöner Suppe
Lesen und verwenden Sie Python-Dateien aus Python
[GUI in Python] PyQt5-Drag & Drop-
Lesen und Schreiben von NetCDF mit Python
Ich habe mit PyQt5 und Python3 gespielt
Lesen Sie Dateien parallel zu Python
Python-Protokollierung und Dump an JSON
Lesen und Schreiben von CSV mit Python
Mehrfachintegration mit Python und Sympy
Laden Sie fbx aus Python mitinema4d
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Schreiben Sie ein Batch-Skript mit Python3.5 ~
Sugoroku-Spiel und Zusatzspiel mit Python
FM-Modulation und Demodulation mit Python
Erstellen und lesen Sie Messagepacks in Python