


Detaillierte Erklärung von JSON und Pickle für die Python-Serialisierung
JSON-Modul
JSON (JavaScript Object Notation) ist ein leichtes Datenaustauschformat. Es basiert auf einer Teilmenge von ECMAScript. JSON verwendet ein völlig sprachunabhängiges Textformat, verwendet aber auch Konventionen ähnlich der C-Sprachfamilie (einschließlich C, C++, Java, JavaScript, Perl, Python usw.). Diese Eigenschaften machen JSON zu einer idealen Datenaustauschsprache. Es ist für Menschen leicht zu lesen und zu schreiben, und es ist auch für Maschinen leicht zu analysieren und zu generieren (wird im Allgemeinen zur Erhöhung der Netzwerkübertragungsraten verwendet).
JSON besteht in Python aus einer Liste bzw. einem Diktat.
1. Python-Typdaten und JSON-Datenformat ineinander konvertieren
pthon Der str-Typ in JSON wird in den Unicode-Typ konvertiert, None wird in konvertiert null und dict entsprechen Objekt
2. Datenkodierung und -dekodierung
1. Einfache Datenkodierung und -dekodierung
Der sogenannte einfache Typ bezieht sich auf den Python-Typ erscheint in der obigen Tabelle.
dumps: Serialisieren Sie das Objekt
#coding:utf-8 import json # 简单编码=========================================== print json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) # ["foo", {"bar": ["baz", null, 1.0, 2]}] #字典排序 print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True) # {"a": 0, "b": 0, "c": 0} #自定义分隔符 print json.dumps([1,2,3,{'4': 5, '6': 7}], sort_keys=True, separators=(',',':')) # [1,2,3,{"4":5,"6":7}] print json.dumps([1,2,3,{'4': 5, '6': 7}], sort_keys=True, separators=('/','-')) # [1/2/3/{"4"-5/"6"-7}] #增加缩进,增强可读性,但缩进空格会使数据变大 print json.dumps({'4': 5, '6': 7}, sort_keys=True,indent=2, separators=(',', ': ')) # { # "4": 5, # "6": 7 # } # 另一个比较有用的dumps参数是skipkeys,默认为False。 # dumps方法存储dict对象时,key必须是str类型,如果出现了其他类型的话,那么会产生TypeError异常,如果开启该参数,设为True的话,会忽略这个key。 data = {'a':1,(1,2):123} print json.dumps(data,skipkeys=True) #{"a": 1}
dump: Serialisieren Sie das Objekt und speichern Sie es in der Datei
# Serialisieren Sie das Objekt und speichern Sie es in der Datei obj = [ ' foo', {'bar': ('baz', None, 1.0, 2)}]
mit open(r"c:json.txt","w ") as f:
json.dump ( obj,f)
Ladet: Deserialisiere die serialisierte Zeichenfolge
import json obj = ['foo', {'bar': ('baz', None, 1.0, 2)}] a= json.dumps(obj) print json.loads(a) # [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
Laden: Lies die serialisierte Zeichenfolge aus der Datei und deserialisiere sie
mit open( r"c:json.txt", "r") as f: print json.load(f)
3. Benutzerdefinierte komplexe Datentyp-Kodierung und -Dekodierung
Zum Beispiel: Wenn wir auf Datentypen wie Datetime-Objekte oder benutzerdefinierte Klassenobjekte stoßen, die von JSON standardmäßig nicht unterstützt werden, müssen wir die Codierungs- und Decodierungsfunktionen anpassen. Es gibt zwei Möglichkeiten, benutzerdefinierte Codecs zu implementieren.
1. Methode 1: Passen Sie die Kodierungs- und Dekodierungsfunktion an
#! /usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "TKQ" import datetime,json dt = datetime.datetime.now() def time2str(obj): #python to json if isinstance(obj, datetime.datetime): json_str = {"datetime":obj.strftime("%Y-%m-%d %X")} return json_str return obj def str2time(json_obj): #json to python if "datetime" in json_obj: date_str,time_str = json_obj["datetime"].split(' ') date = [int(x) for x in date_str.split('-')] time = [int(x) for x in time_str.split(':')] dt = datetime.datetime(date[0],date[1], date[2], time[0],time[1], time[2]) return dt return json_obj a = json.dumps(dt,default=time2str) print a # {"datetime": "2016-10-27 17:38:31"} print json.loads(a,object_hook=str2time) # 2016-10-27 17:38:31
2. Methode 2: Erben Sie die Klassen JSONEncoder und JSONDecoder und schreiben Sie die relevanten Methoden neu
#! /usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "TKQ" import datetime,json dt = datetime.datetime.now() dd = [dt,[1,2,3]] class MyEncoder(json.JSONEncoder): def default(self,obj): #python to json if isinstance(obj, datetime.datetime): json_str = {"datetime":obj.strftime("%Y-%m-%d %X")} return json_str return obj class MyDecoder(json.JSONDecoder): def __init__(self): json.JSONDecoder.__init__(self, object_hook=self.str2time) def str2time(self,json_obj): #json to python if "datetime" in json_obj: date_str,time_str = json_obj["datetime"].split(' ') date = [int(x) for x in date_str.split('-')] time = [int(x) for x in time_str.split(':')] dt = datetime.datetime(date[0],date[1], date[2], time[0],time[1], time[2]) return dt return json_obj # a = json.dumps(dt,default=time2str) a =MyEncoder().encode(dd) print a # [{"datetime": "2016-10-27 18:14:54"}, [1, 2, 3]] print MyDecoder().decode(a) # [datetime.datetime(2016, 10, 27, 18, 14, 54), [1, 2, 3]]
Pickle-Modul
Pythons Pickle-Modul implementiert die gesamte Datenserialisierung und Deserialisierung von Python. Grundsätzlich unterscheidet sich die Funktionsnutzung nicht wesentlich vom JSON-Modul, und die Methoden sind ebenfalls dumps/dump und Loads/load. cPickle ist eine relativ schnellere, in C-Sprache kompilierte Version des Pickle-Moduls.
Im Gegensatz zu JSON wird Pickle nicht für die Datenübertragung zwischen mehreren Sprachen verwendet. Es wird nur als Persistenzmethode für Python-Objekte oder als Methode zum Übertragen von Objekten zwischen Python-Programmen verwendet und unterstützt daher alle Python-Daten .
Das durch Pickle deserialisierte Objekt ist ein äquivalentes Kopierobjekt zum Originalobjekt, ähnlich wie Deepcopy.
Dumps/Dump-Serialisierung
from datetime import date try: import cPickle as pickle #python 2 except ImportError as e: import pickle #python 3 src_dic = {"date":date.today(),"oth":([1,"a"],None,True,False),} det_str = pickle.dumps(src_dic) print det_str # (dp1 # S'date' # p2 # cdatetime # date # p3 # (S'\x07\xe0\n\x1b' # tRp4 # sS'oth' # p5 # ((lp6 # I1 # aS'a' # aNI01 # I00 # tp7 # s. with open(r"c:\pickle.txt","w") as f: pickle.dump(src_dic,f)
Ladevorgänge/Deserialisierung
from datetime import date try: import cPickle as pickle #python 2 except ImportError as e: import pickle #python 3 src_dic = {"date":date.today(),"oth":([1,"a"],None,True,False),} det_str = pickle.dumps(src_dic) with open(r"c:\pickle.txt","r") as f: print pickle.load(f) # {'date': datetime.date(2016, 10, 27), 'oth': ([1, 'a'], None, True, False)}
Der Unterschied zwischen JSON- und Pickle-Modulen
1. JSON Nur Basic Datentypen verarbeitet werden können. pickle kann alle Python-Datentypen verarbeiten.
2. JSON wird für die Zeichenkonvertierung zwischen verschiedenen Sprachen verwendet. Pickle wird für die Persistenz von Python-Programmobjekten oder die Netzwerkübertragung von Objekten zwischen Python-Programmen verwendet, es kann jedoch Unterschiede bei der Serialisierung verschiedener Python-Versionen geben.

Die Gründe, warum Python -Skripte auf UNIX -Systemen nicht ausgeführt werden können, sind: 1) unzureichende Berechtigungen unter Verwendung von chmod xyour_script.py zur Erteilung von Ausführungsberechtigungen; 2) Falsche oder fehlende Shebang -Linie, Sie sollten #!/Usr/bin/envpython verwenden; 3) In falsche Einstellungen für die Umgebungsvariablen können Sie os.Environ -Debugging drucken. 4) Mit der falschen Python -Version können Sie die Version in der Shebang -Zeile oder der Befehlszeile angeben. 5) Abhängigkeitsprobleme unter Verwendung der virtuellen Umgebung, um Abhängigkeiten zu isolieren; 6) Syntaxfehler, verwenden Sie Python-Mpy_CompileYour_Script.py, um zu erkennen.

Die Verwendung von Python -Arrays eignet sich besser für die Verarbeitung großer Mengen von numerischen Daten als für Listen. 1) Arrays speichern mehr Speicher, 2) Arrays sind schneller nach numerischen Werten, 3) Konsistenz vom Arrays Kraftstyp, 4) Arrays sind mit C -Arrays kompatibel, sind jedoch nicht so flexibel und bequem wie Listen.

Listen besser voreflexibilität undmixdatatatypen, während Datensätze der überlegenen sumerischen Berechnungen sandlastete

NumpymanageMemoryforlargearrayseffictionlyusingViews, Kopien und Memory-Made.1) ViewsAllowsLicing Mit Outcopying, direktModifizierende Theoriginalarray.2) CopieScanbecreated withthecopy () methodeChoperingdata.3) Memory-Maddscanbeed-medellessive-made-mapedFileshandleshandLessive-massessive-massessiva

ListsinpythondonotRequireMportingamodule, whilearRays aus der FROMTHEARRAYMODULEDONEDANIMIMPORT.1) listet zur Verfügung gestellt.

PythonlistscanstoreanyDatatype, ArrayModulearraysStoreOnetype und NumpyarraysarefornumericalComputations.1) listet dieArversatile-memory-effizient.2) Arraymodulenarraysalememory-effizientforhomogeneData.3) Numpharraysareoptional-EffictionhomogenInData.3) nummodulenarraysoptionalinformanceIntata.3) nummodulearraysoptionalinformanceIntata.3) NumpharraysareoPresopplowancalinScesDataa.3) NumpharraysoePerformance

Wenn SietostoreavalueOfThewrongdatatypeinapythonarray, touencounteratypeerror.Thissisdustuetothearraymodules -SstrictTypeNeen -Forcortion, welche

PythonlistsarePartThestandardlibrary, whilearraysarenot.listarebuilt-in, vielseitig und UNDUSEDFORSPORINGECollections, während dieArrayRay-thearrayModulei und loses und loses und losesaluseduetolimitedFunctionality.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version
