Hur man serialiserar och avserialiserar data i Python

Innehållsförteckning

Python har flera sätt att serialisera / deserialisera data. I denna handledning kommer vi att se modulen marskalk och modulen cpickle. Innan vi tittar på hur man serialiserar i Python, låt oss kort förklara detta koncept. Serialisering är en process som ofta används för att spara objekt i en fil eller databas eller skicka dem över nätverket.

Det är dags att börja med självstudien, vi kommer att se ett exempel för varje modul.

1. Marshalmodul


Innan du börjar bör du veta att den här modulen inte garanterar kompatibilitet mellan olika versioner av Python -kompilatorn.

Exempel 1
Låt oss se det första, mycket enkla exemplet:

 importera marshaldata = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserialized:", objectLoad)
Som ett första steg importerar vi marskalkbiblioteket, vi har skapat en lista som vi ska serialisera, sedan målar vi det och avserialiserar det. Funktionen soptippar tar hand om serien och funktionen massor att deserialisera (båda tar emot objektet att låsa med). Mycket lätt som du har sett. Här är en skärmdump av dess utförande:

Och här avslutar vi med det första exemplet.

Exempel 2
I det här exemplet ska vi skriva ett objekt till en fil.

 importera marshaldata = [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 och listan behålls, först nu ska vi använda filer, vi öppnar en fil för att skriva, b är för byte, och vi dumpar listan (nu är funktionen dumpa och tar emot data för att skriva och filen), när vi avslutar stänger vi den. För att avsluta öppnar vi samma fil i läsläge och läser från den (notera att funktionen är ladda, och som tar emot filen som en parameter), för att avsluta stänger vi filen.

Om vi ​​tittar på filen file.dat, kommer vi att se följande:

Nätverk är inte mycket svårare, kom bara ihåg den lilla kompatibilitetsbegränsningen mellan Python -versioner. Låt oss gå vidare till den andra modulen.

2. Cpickle -modul


Denna modul är skriven i C, det finns en annan som kallas pickle som är utvecklad i Python, men den är långsammare, så det är lämpligt att använda cpickle. Till skillnad från marshal kommer denna modul att garantera kompatibilitet mellan Python -versioner, så innan vi programmerar måste vi ta hänsyn till dessa saker.

NoteraI Python 3 döptes cPickle om till _pickle och används automatiskt av pickle -modulen.

För den här modulen kommer vi att se ett exempel, där vi använder sockets, vi kommer att se serverkoden, det handlar bara om hur vi skulle utföra serialiseringen eller deserialiseringen, det är därför det inte inkluderar felhantering och en ett enda meddelande används.

 import socket import pickle s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Data mottaget: ", data) print (" Deserialized: ", pickle.loads (data)) s.close ()
Vi ser att allt fungerar som med vanliga uttag, bara att den mottagna informationen kommer att komma i serie, så vi avserialiserar den med funktionen massor, som du kan se det kallas det samma som i marshalmodulen. Slutligen kommer vi att 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. stänga ()
Det har ingen större komplikation, vi serialiserar objektet med soptippar och vi skickar det till det skapade uttaget. Nedanför lämnar jag serverutgången när en klient ansluter, klientutmatningen ignoreras eftersom det inte visar något.

Hittills kommer självstudien om att serialisera och deserialisera data i Python, eftersom vi vet att detta språk gör saker mycket lättare för oss.

NoteraHandledningen använder versionen av Python 3.5.

Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave