Come serializzare e deserializzare i dati in Python

Python ha diversi modi per serializzare/deserializzare i dati. In questo tutorial vedremo il modulo maresciallo e il modulo sottaceto. Prima di esaminare come serializzare in Python, spieghiamo brevemente questo concetto. La serializzazione è un processo ampiamente utilizzato per salvare oggetti in un file o database o per inviarli in rete.

È ora di iniziare con il tutorial, vedremo un esempio con ogni modulo.

1. Modulo Maresciallo


Prima di iniziare dovresti sapere che questo modulo non garantisce la compatibilità tra le diverse versioni del compilatore Python.

Esempio 1
Vediamo il primo, semplicissimo esempio:

 import marshal data = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserialized:", objectLoad)
Per prima cosa importiamo la libreria marshal, abbiamo creato un elenco che andremo a serializzare, quindi lo dipingiamo e lo deserializziamo. La funzione discariche si occupa della serializzazione e della funzione carichi deserializzare (entrambi ricevono l'oggetto con cui bloccare). Molto facile come hai visto. Ecco uno screenshot della sua esecuzione:

E qui concludiamo con il primo esempio.

Esempio 2
In questo esempio scriveremo un oggetto in un file.

 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 () 
L'importazione e l'elenco vengono mantenuti, solo ora utilizzeremo i file, apriamo un file per la scrittura, il B è per byte e scarichiamo l'elenco (ora la funzione è scarico e riceve i dati da scrivere e il file), quando abbiamo finito lo chiudiamo. Per finire apriamo lo stesso file in modalità lettura e leggiamo da esso (nota che la funzione è caricare, e che riceve il file come parametro), per finire chiudiamo il file.

Se guardiamo il file file.dat, vedremo quanto segue:

La rete non è molto più difficile, ricorda solo la piccola limitazione di compatibilità tra le versioni di Python. Passiamo all'altro modulo.

2. Modulo Cpickle


Questo modulo è scritto in C, ce n'è un altro chiamato pickle che è sviluppato in Python, ma è più lento, quindi è consigliabile usare cpickle. A differenza di marshal, questo modulo garantirà la compatibilità tra le versioni di Python, quindi prima di programmare dobbiamo tenere conto di queste cose.

NotaIn Python 3 cPickle è stato rinominato in _pickle e viene utilizzato automaticamente dal modulo pickle.

Per questo modulo vedremo un esempio, in cui usiamo i socket, vedremo il codice del server, si tratta solo di come eseguiremmo la serializzazione o la deserializzazione, ecco perché non include la gestione degli errori e un viene utilizzato un singolo messaggio.

 import socket import pickle s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Data ricevuto: ", data) print (" Deserialized: ", pickle.loads (data)) s.close ()
Vediamo che tutto funziona come con i normali socket, solo che i dati ricevuti arriveranno serializzati, quindi lo deserializziamo con la funzione carichi, come puoi vedere è chiamato come nel modulo marshal. Infine vedremo il cliente:
 import socket import pickle s = socket.socket () data = [1, 2, 3, 4] objectBytes = pickle.dumps (data) a.connect (("localhost", 2016)) a.send (objectBytes) a. chiudere ()
Non ha grosse complicazioni, serializziamo l'oggetto con discariche e lo inviamo al socket creato. Di seguito lascio l'output del server quando un client si connette, l'output del client viene ignorato in quanto non mostra nulla.

Finora arriva il tutorial sulla serializzazione e deserializzazione dei dati in Python, poiché sappiamo che questo linguaggio rende le cose molto più semplici per noi.

NotaIl tutorial utilizza la versione di Python 3.5.

Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo
wave wave wave wave wave