Sådan serialiseres og deserialiseres data i Python

Indholdsfortegnelse

Python har flere måder at serialisere / deserialisere data på. I denne tutorial ser vi modulet marskal og modulet cpickle. Før vi ser på, hvordan man serialiserer i Python, lad os kort forklare dette koncept. Serialisering er en meget udbredt proces til at gemme objekter i en fil eller database eller til at sende dem over netværket.

Det er tid til at starte med selvstudiet, vi ser et eksempel med hvert modul.

1. Marshal -modul


Inden du starter, skal du vide, at dette modul ikke sikrer kompatibilitet mellem forskellige versioner af Python -kompilatoren.

Eksempel 1
Lad os se det første, meget enkle eksempel:

 import marshal data = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserialized:", objectLoad)
Som et første trin importerer vi marskalkbiblioteket, vi har oprettet en liste, som vi skal serialisere, derefter maler vi det og deserialiserer det. Funktionen lossepladser tager sig af serialisering og funktionen belastninger at deserialisere (begge modtager objektet, der skal låses med). Meget let som du har set. Her er et skærmbillede af dens udførelse:

Og her slutter vi med det første eksempel.

Eksempel 2
I dette eksempel vil vi skrive et objekt til en fil.

 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 ("Deserialiseret:", dataLoad) fileIn.close () 
Importen og listen bevares, først nu skal vi bruge filer, vi åbner en fil til skrivning, b er for bytes, og vi dumper listen (nu er funktionen dump og modtager dataene til at skrive og filen), når vi er færdige, lukker vi dem. For at afslutte åbner vi den samme fil i læsetilstand og læser fra den (bemærk at funktionen er belastning, og som modtager filen som en parameter), for at afslutte lukker vi filen.

Hvis vi ser på filen file.dat, vil vi se følgende:

Netværk er ikke meget vanskeligere, bare husk den lille kompatibilitetsbegrænsning mellem Python -versioner. Lad os gå videre til det andet modul.

2. Cpickle modul


Dette modul er skrevet i C, der er et andet kaldet pickle, der er udviklet i Python, men det er langsommere, så det er tilrådeligt at bruge cpickle. I modsætning til marskal vil dette modul garantere kompatibilitet mellem Python -versioner, så før programmering skal vi tage disse ting i betragtning.

BemærkI Python 3 blev cPickle omdøbt til _pickle og bruges automatisk af pickle -modulet.

For dette modul kommer vi til at se et eksempel, hvor vi bruger sockets, vi skal se serverkoden, det handler kun om, hvordan vi ville udføre serialiseringen eller deserialiseringen, det er derfor det ikke inkluderer fejlhåndtering og en bruges en enkelt besked.

 import socket import pickle s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Data modtaget: ", data) print (" Deserialiseret: ", pickle.loads (data)) s.close ()
Vi ser, at alt fungerer som med normale stikkontakter, kun at de modtagne data vil komme i serie, så vi deserialiserer dem med funktionen belastninger, som du kan se det kaldes det samme som i marskalk modulet. Endelig ser vi klienten:
 import socket import pickle s = socket.socket () data = [1, 2, 3, 4] objectBytes = pickle.dumps (data) s.connect (("localhost", 2016)) s.send (objectBytes) s. tæt ()
Det har ingen større komplikation, vi serialiserer objektet med lossepladser og vi sender det til den oprettede stikkontakt. Nedenfor forlader jeg serveroutput, når en klient forbinder, ignoreres klientoutput, da det ikke viser noget.

Indtil videre kommer selvstudiet om serialisering og deserialisering af data i Python, da vi kender dette sprog, gør tingene meget lettere for os.

BemærkVejledningen bruger versionen af Python 3.5.

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave