Hvordan serialisere og deserialisere data i Python

Innholdsfortegnelse

Python har flere måter å serialisere / deserialisere data på. I denne opplæringen skal vi se modulen marskalk og modulen cpickle. Før vi ser på hvordan du serialiserer i Python, la oss kort forklare dette konseptet. Serialisering er en mye brukt prosess for å lagre objekter i en fil eller database eller for å sende dem over nettverket.

Det er på tide å begynne med opplæringen, vi vil se et eksempel på hver modul.

1. Marshalmodul


Før du starter, bør du vite at denne modulen ikke sikrer kompatibilitet mellom forskjellige versjoner av Python -kompilatoren.

Eksempel 1
La oss se det første, veldig enkle eksemplet:

 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 trinn importerer vi marskalkbiblioteket, vi har laget en liste som vi skal serialisere, deretter maler vi det og deserialiserer det. Funksjonen dumper tar seg av serien og funksjonen laster å deserialisere (begge mottar objektet å låse med). Veldig enkelt som du har sett. Her er et skjermbilde av utførelsen:

Og her avslutter vi med det første eksemplet.

Eksempel 2
I dette eksemplet skal 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 ("Deserialized:", dataLoad) fileIn.close () 
Importen og listen beholdes, bare nå skal vi bruke filer, vi åpner en fil for skriving b er for byte, og vi dumper listen (nå er funksjonen dump og mottar dataene for å skrive og filen), når vi er ferdige, lukker vi dem. For å fullføre åpner vi den samme filen i lesemodus og leser fra den (merk at funksjonen er laste, og som mottar filen som en parameter), for å fullføre lukker vi filen.

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

Nettverk er ikke mye vanskeligere, bare husk den lille kompatibilitetsbegrensningen mellom Python -versjoner. La oss gå videre til den andre modulen.

2. Cpickle -modul


Denne modulen er skrevet i C, det er en annen som kalles pickle som er utviklet i Python, men den er tregere, så det er lurt å bruke cpickle. I motsetning til marshal, kommer denne modulen til å garantere kompatibilitet mellom Python -versjoner, så før programmering må vi ta disse tingene i betraktning.

MerkI Python 3 ble cPickle omdøpt til _pickle og brukes automatisk av pickle -modulen.

For denne modulen kommer vi til å se et eksempel, der vi bruker sockets, vi skal se serverkoden, den handler bare om hvordan vi ville utføre serialiseringen eller deserialiseringen, det er derfor den ikke inkluderer feilhåndtering og en enkelt melding brukes.

 import socket import pickle s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Data mottatt: ", data) print (" Deserialized: ", pickle.loads (data)) s.close ()
Vi ser at alt fungerer som med vanlige stikkontakter, bare at de mottatte dataene kommer seriell, så vi deserialiserer det med funksjonen laster, som du kan se, kalles det det samme som i marshalmodulen. Til slutt vil vi se 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. Lukk ()
Det har ingen større komplikasjon, vi serialiserer objektet med dumper og vi sender den til kontakten som er opprettet. Nedenfor forlater jeg serverutgangen når en klient kobler seg til, klientutgangen ignoreres da den ikke viser noe.

Så langt kommer opplæringen om serialisering og deserialisering av data i Python, ettersom vi kjenner dette språket, gjør ting mye lettere for oss.

MerkOpplæringen bruker versjonen av Python 3.5.

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave