Cum se serializează și se deserializează datele în Python

Python are mai multe moduri de serializare / deserializare a datelor. În acest tutorial vom vedea modulul mareșal și modulul ciuperci. Înainte de a analiza cum să serializăm în Python, să explicăm pe scurt acest concept. Serializarea este un proces utilizat pe scară largă pentru a salva obiecte într-un fișier sau bază de date sau pentru a le trimite prin rețea.

Este timpul să începem cu tutorialul, vom vedea un exemplu cu fiecare modul.

1. Modul Marshal


Înainte de a începe, trebuie să știți că acest modul nu asigură compatibilitatea între diferitele versiuni ale compilatorului Python.

Exemplul 1
Să vedem primul exemplu foarte simplu:

 import marshal data = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserialized:", objectLoad)
Ca prim pas, importăm biblioteca mareșal, am creat o listă pe care urmează să o serializăm, apoi o pictăm și o deserializăm. Functia halde se ocupă de serializare și funcție încărcături a deserializa (ambii primesc obiectul cu care se blochează). Foarte ușor așa cum ați văzut. Iată o captură de ecran a execuției sale:

Și aici încheiem cu primul exemplu.

Exemplul 2
În acest exemplu vom scrie un obiect într-un fișier.

 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 () 
Importul și lista sunt păstrate, abia acum vom folosi fișiere, deschidem un fișier pentru scriere, b este pentru octeți și renunțăm la listă (acum funcția este dump și primește datele de scris și fișierul), când terminăm, îl închidem. Pentru a termina, deschidem același fișier în modul de citire și citim din acesta (rețineți că funcția este sarcină, și care primește fișierul ca parametru), pentru a termina închidem fișierul.

Dacă ne uităm la dosar file.dat, vom vedea următoarele:

Rețeaua nu este mult mai dificilă, trebuie doar să ne amintim de mica limitare a compatibilității dintre versiunile Python. Să trecem la celălalt modul.

2. Modulul Cpickle


Acest modul este scris în C, există un altul numit murătură care este dezvoltat în Python, dar este mai lent, deci este recomandabil să utilizați cpickle. Spre deosebire de mareșal, acest modul va garanta compatibilitatea între versiunile Python, deci înainte de programare trebuie să ținem cont de aceste lucruri.

NotăÎn Python 3 cPickle a fost redenumit în _pickle și este utilizat automat de modulul de murături.

Pentru acest modul vom vedea un exemplu, în care folosim sockets, vom vedea codul serverului, este vorba doar despre modul în care am efectua serializarea sau deserializarea, de aceea nu include gestionarea erorilor și un se utilizează un singur mesaj.

 import socket import pickle s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Data primit: ", date) print (" Deserializat: ", pickle.loads (data)) s.close ()
Vedem că totul funcționează ca la soclurile normale, doar că datele primite vor ajunge serializate, așa că le deserializăm cu funcția încărcături, după cum puteți vedea, se numește la fel ca în modulul mareșal. În cele din urmă, vom vedea clientul:
 import socket import pickle s = socket.socket () data = [1, 2, 3, 4] objectBytes = pickle.dumps (data) s.connect (("localhost", 2016)) s.send (objectBytes) s. închide ()
Nu are nicio complicație majoră, serializăm obiectul cu halde și îl trimitem la socketul creat. Mai jos las ieșirea serverului când un client se conectează, ieșirea clientului este ignorată deoarece nu arată nimic.

Până acum vine tutorialul despre serializarea și deserializarea datelor în Python, deoarece știm că acest limbaj ne face lucrurile mult mai ușoare.

NotăTutorialul folosește versiunea de Python 3.5.

V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave