Python ima nekoliko načina za serijalizaciju / deserijalizaciju podataka. U ovom vodiču ćemo vidjeti modul maršal i modul cpickle. Prije nego pogledamo kako se serijalizirati u Pythonu, objasnimo ukratko ovaj koncept. Serijalizacija je proces koji se naširoko koristi za spremanje objekata u datoteku ili bazu podataka ili njihovo slanje putem mreže.
Vrijeme je za početak s vodičem, vidjet ćemo primjer sa svakim modulom.
1. Maršal modul
Prije početka trebate znati da ovaj modul ne osigurava kompatibilnost između različitih verzija prevoditelja Python.
Primjer 1
Pogledajmo prvi, vrlo jednostavan primjer:
import marshal data = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serijski:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserijalizirano:", objectLoad)Kao prvi korak uvozimo maršal knjižnicu, stvorili smo popis koji ćemo serijalizirati, zatim ga obojati i deserijalizirati. Funkcija deponije brine se za serijalizaciju i funkciju opterećenja za deserijalizaciju (oboje primaju objekt za zaključavanje). Vrlo lako kao što ste vidjeli. Evo snimke zaslona njegove izvedbe:
I ovdje zaključujemo prvim primjerom.
Primjer 2
U ovom primjeru zapisat ćemo objekt u datoteku.
uvoz maršal podataka = [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 ()Uvoz i popis se čuvaju, samo što ćemo sada koristiti datoteke, otvorimo datoteku za pisanje, b je za bajtove, a mi ispisujemo popis (sada je funkcija istovariti i prima podatke za pisanje i datoteku), kad završimo, zatvaramo ih. Za kraj otvorimo istu datoteku u načinu čitanja i čitamo iz nje (imajte na umu da je funkcija opterećenje, i to prima datoteku kao parametar), da bismo završili, zatvaramo datoteku.
Pogledamo li datoteku file.dat, vidjet ćemo sljedeće:
Umrežavanje nije puno teže, samo se sjetite malog ograničenja kompatibilnosti između verzija Pythona. Prijeđimo na drugi modul.
2. Cpickle modul
Ovaj je modul napisan na C, postoji još jedan koji se naziva pickle koji je razvijen u Pythonu, ali je sporiji, pa je poželjno koristiti cpickle. Za razliku od marshala, ovaj će modul jamčiti kompatibilnost između verzija Pythona, pa prije programiranja moramo uzeti u obzir ove stvari.
BilješkaU Pythonu 3 cPickle je preimenovan u _pickle i automatski ga koristi modul pickle.
Za ovaj modul vidjet ćemo primjer u kojem koristimo utičnice, vidjet ćemo kôd poslužitelja, radi se samo o tome kako bismo izvršili serializaciju ili deserijalizaciju, zato ne uključuje rukovanje pogreškama i koristi se jedna poruka.
import socket import pickle s = socket.socket () s.bind (("localhost", 2016.)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Podaci primljeno: ", podaci) print (" Deserijalizirano: ", pickle.loads (podaci)) s.close ()Vidimo da sve radi kao i kod normalnih utičnica, samo da će primljeni podaci stizati serijski, pa smo ih deserijalizirali funkcijom opterećenja, kao što vidite naziva se isto kao u maršalskom modulu. Konačno ćemo vidjeti klijenta:
import socket import pickle s = socket.socket () data = [1, 2, 3, 4] objectBytes = pickle.dumps (data) s.connect (("localhost", 2016.)) s.send (objectBytes) s. Zatvoriti ()Nema većih komplikacija, objekt serializiramo pomoću deponije i šaljemo ga u stvorenu utičnicu. Ispod ostavljam izlaz poslužitelja kada se klijent poveže, izlaz klijenta se zanemaruje jer ne pokazuje ništa.
Zasad dolazi vodič o serializaciji i deserijalizaciji podataka u Pythonu, jer znamo da nam ovaj jezik čini stvari mnogo lakšima.
BilješkaVodič koristi verziju Python 3.5.
Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod