Wir müssen die Daten im Speicher serialisieren, das heißt, beim Schreiben in eine Datei kann der geschriebene Typ nur ein String oder ein Binärtyp sein. Wenn wir jedoch komplexere Datentypen wie Listen, Wörterbücher oder Funktionen serialisieren möchten, müssen wir JSON oder Pickle verwenden.
Dumps wandelt den Datentyp in einen String um
import json info = { 'name': 'The Count of Monte Cristo', 'type': 'Movie' } data = json.dumps(info) print(data) print(type(data)) # 输出 {"name": "The Count of Monte Cristo", "type": "Movie"} <class 'str'>
loads konvertiert die Zeichenfolge in einen Datentyp
import json get_info = json.loads(data) print(get_info['name']) print(get_info) print(type(get_info)) #输出 The Count of Monte Cristo {'name': 'The Count of Monte Cristo', 'type': 'Movie'} <class 'dict'>
dump konvertiert den Datentyp in einen String und speichert ihn in der Datei
import json info = { 'name': 'The Count of Monte Cristo', 'type': 'Movie' } with open("test.txt", "w", encoding="utf-8") as f: json.dump(info, f) # 第一个参数是内存中的数据对象,第二个参数是文件句柄 #写入文件中的内容 {"name": "The Count of Monte Cristo", "type": "Movie"}
load öffnet die Datei und wandelt den String in einen Datentyp um
import json with open("test.txt", "r", encoding="utf-8") as f: data_from_file = json.load(f) print(data_from_file['name']) print(data_from_file) print(type(data_from_file)) #输出 The Count of Monte Cristo {'name': 'The Count of Monte Cristo', 'type': 'Movie'} <class 'dict'>
import json def test(name): print("hello,{}".format(name)) info = { 'name': 'The Count of Monte Cristo', 'type': 'Movie', 'func': test } data = json.dumps(info) #输出 File "G:/python/untitled/study6/json&pickle模块.py", line 22, in <module> data = json.dumps(info) File "G:\python\install\lib\json\__init__.py", line 230, in dumps return _default_encoder.encode(obj) File "G:\python\install\lib\json\encoder.py", line 198, in encode chunks = self.iterencode(o, _one_shot=True) File "G:\python\install\lib\json\encoder.py", line 256, in iterencode return _iterencode(o, 0) File "G:\python\install\lib\json\encoder.py", line 179, in default raise TypeError(repr(o) + " is not JSON serializable") TypeError: <function test at 0x0000021B13C57F28> is not JSON serializable
1. Json kann nur einfache Datentypen verarbeiten. Zeichenfolgen usw. können komplexe Datentypen wie Funktionen nicht verarbeiten.
2. JSON ist für alle Sprachen gleich und alle Sprachen unterstützen JSON. Wenn wir Python für die Interaktion mit anderen Sprachen für Daten benötigen, verwenden wir das JSON-Format
Die Verwendung von Pickle ist die gleiche wie oben, aber der Datentyp nach der Pickle-Serialisierung ist binär und Pickle kann nur sein Wird in Python verwendet.
import pickle def test(name): print("hello,{}".format(name)) info = { 'name': 'The Count of Monte Cristo', 'type': 'Movie', 'func': test } data = pickle.dumps(info) print(data) print(type(data)) #输出 b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x19\x00\x00\x00The Count of Monte Cristoq\x02X\x04\x00\x00\x00typeq\x03X\x05\x00\x00\x00Movieq\x04X\x04\x00\x00\x00funcq\x05c__main__\ntest\nq\x06u.' <class 'bytes'>
import pickle get_data = pickle.loads(data) get_data['func']('cat') print(get_data) #输出 hello,cat {'name': 'The Count of Monte Cristo', 'type': 'Movie', 'func': <function test at 0x00000235350A7F28>}
import pickle def test(name): print("hello,{}".format(name)) info = { 'name': 'The Count of Monte Cristo', 'type': 'Movie', 'func': test } with open('test.txt', 'wb') as f: pickle.dump(info, f) # 写入test.txt文件中的内容 �}q (X typeqX MovieqX funcqc__main__ test qX nameqX The Count of Monte Cristoqu.
import pickle with open('test.txt', 'rb') as f: get_data = pickle.load(f) print(get_data) # 输出 {'name': 'The Count of Monte Cristo', 'func': <function test at 0x000001BA2AB4D510>, 'type': 'Movie'}
Zusammenfassung:
json value unterstützt einfache Datentypen und pickle unterstützt alle Datentypen.
pickle kann nur die Serialisierung und Deserialisierung von Python selbst unterstützen und kann nicht für die Dateninteraktion mit anderen Sprachen verwendet werden, während JSON dies kann.
pickle serialisiert das gesamte Datenobjekt, sodass sich beim Deserialisieren einer Funktion die Logik im Funktionskörper ändert und dem ursprünglichen Funktionskörper folgt.
Das obige ist der detaillierte Inhalt vonBeispiel für die Serialisierung von In-Memory-Daten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!