Jak serializovat a deserializovat data v Pythonu

Python má několik způsobů, jak serializovat / deserializovat data. V tomto tutoriálu uvidíme modul maršál a modul cpickle. Než se podíváme na to, jak serializovat v Pythonu, pojďme si tento koncept stručně vysvětlit. Serializace je široce používaný proces k ukládání objektů do souboru nebo databáze nebo k jejich odesílání po síti.

Je čas začít s výukovým programem, u každého modulu uvidíme příklad.

1. Modul maršála


Než začnete, měli byste vědět, že tento modul nezajišťuje kompatibilitu mezi různými verzemi kompilátoru Pythonu.

Příklad 1
Podívejme se na první, velmi jednoduchý příklad:

 import marshal data = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserialized:", objectLoad)
Jako první krok importujeme knihovnu maršálů, vytvořili jsme seznam, který budeme serializovat, poté jej namalujeme a deserializujeme. Funkce skládky stará se o serializaci a funkci zatížení k deserializaci (oba obdrží objekt, se kterým se zamknou). Velmi snadné, jak jste viděli. Zde je screenshot jeho provedení:

A zde končíme prvním příkladem.

Příklad 2
V tomto případě napíšeme objekt do souboru.

 import marshal data = [1, 2, 3, 4] fileOut = open ("file.dat", "bw") marshal.dump (data, fileOut) fileOut.close () fileIn = open ("file.dat", "br") dataLoad = marshal.load (fileIn) print ("Deserialized:", dataLoad) fileIn.close () 
Import a seznam jsou zachovány, teprve nyní budeme používat soubory, otevřeme soubor pro zápis, b je pro bajty a vypisujeme seznam (nyní je funkce skládka a přijme data k zápisu a soubor), když skončíme, zavřeme je. Na závěr otevřeme stejný soubor v režimu čtení a čteme z něj (všimněte si, že funkce je zatížení, a který přijme soubor jako parametr), pro dokončení soubor zavřeme.

Pokud se podíváme na soubor soubor.dat, uvidíme následující:

Sítě nejsou o mnoho obtížnější, pamatujte na malé omezení kompatibility mezi verzemi Pythonu. Přejdeme k druhému modulu.

2. Modul Cpickle


Tento modul je napsán v jazyce C, v Pythonu je vyvíjen ještě jeden, zvaný pickle, ale je pomalejší, proto je vhodné použít cpickle. Na rozdíl od maršála tento modul zaručí kompatibilitu mezi verzemi Pythonu, takže před programováním musíme tyto věci vzít v úvahu.

PoznámkaV Pythonu 3 byl cPickle přejmenován na _pickle a je automaticky používán modulem pickle.

Pro tento modul uvidíme příklad, ve kterém používáme sokety, uvidíme kód serveru, jde jen o to, jak bychom provedli serializaci nebo deserializaci, proto neobsahuje zpracování chyb a používá se jedna zpráva.

 import socket import pickle s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Data přijato: ", data) print (" Deserialized: ", pickle.loads (data)) s.close ()
Vidíme, že vše funguje jako u běžných soketů, pouze že přijatá data dorazí serializovaná, takže je deserializujeme pomocí funkce zatížení, jak vidíte, nazývá se stejně jako v maršálovém modulu. Nakonec uvidíme klienta:
 import socket import pickle s = socket.socket () data = [1, 2, 3, 4] objectBytes = pickle.dumps (data) s.connect (("localhost", 2016)) s.send (objectBytes) s. zavřít ()
Nemá žádnou zásadní komplikaci, objekt serializujeme pomocí skládky a odešleme jej do vytvořeného soketu. Níže ponechám výstup serveru, když se klient připojí, výstup klienta je ignorován, protože nic neukazuje.

Zatím přichází návod na serializaci a deserializaci dat v Pythonu, protože víme, že tento jazyk nám to hodně usnadňuje.

PoznámkaVýukový program používá verzi Python 3.5.

Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave