Jak serializować i deserializować dane w Pythonie

Python ma kilka sposobów serializacji / deserializacji danych. W tym samouczku zobaczymy moduł marszałek i moduł skakać. Zanim przyjrzymy się, jak serializować w Pythonie, krótko wyjaśnijmy tę koncepcję. Serializacja to szeroko stosowany proces zapisywania obiektów do pliku lub bazy danych lub przesyłania ich przez sieć.

Czas zacząć od tutoriala, przy każdym module zobaczymy przykład.

1. Moduł marszałka


Przed rozpoczęciem powinieneś wiedzieć, że ten moduł nie zapewnia kompatybilności pomiędzy różnymi wersjami kompilatora Pythona.

Przykład 1
Zobaczmy pierwszy, bardzo prosty przykład:

 import marshal data = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserialized:", objectLoad)
W pierwszym kroku importujemy bibliotekę marshal, stworzyliśmy listę, którą zamierzamy serializować, następnie malujemy ją i deserializujemy. Funkcja depresja dba o serializację i funkcję masa do deserializacji (obaj otrzymują obiekt do zablokowania). Jak widzieliście, bardzo proste. Oto zrzut ekranu z jego wykonania:

I tutaj kończymy pierwszym przykładem.

Przykład 2
W tym przykładzie zapiszemy obiekt do pliku.

 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 ("Zdeserializowany:", dataLoad) fileIn.close () 
Import i lista są zachowane, dopiero teraz będziemy korzystać z plików, otwieramy plik do zapisu, b jest dla bajtów i zrzucamy listę (teraz funkcja to wysypisko i otrzymuje dane do zapisu i plik), po zakończeniu zamykamy go. Aby zakończyć otwieramy ten sam plik w trybie odczytu i czytamy z niego (zauważ, że funkcja to Załaduj, który otrzymuje plik jako parametr), aby zakończyć, zamykamy plik.

Jeśli spojrzymy na plik plik.dat, zobaczymy:

Praca w sieci nie jest dużo trudniejsza, pamiętaj tylko o małym ograniczeniu kompatybilności między wersjami Pythona. Przejdźmy do drugiego modułu.

2. Moduł wykańczający


Ten moduł jest napisany w C, istnieje inny o nazwie pickle, który jest rozwijany w Pythonie, ale jest wolniejszy, więc zaleca się użycie cpickle. W przeciwieństwie do Marshala, ten moduł ma gwarantować kompatybilność między wersjami Pythona, więc przed programowaniem musimy wziąć te rzeczy pod uwagę.

NotatkaW Pythonie 3 cPickle został przemianowany na _pickle i jest używany automatycznie przez moduł pickle.

Dla tego modułu zobaczymy przykład, w którym korzystamy z socketów, zobaczymy kod serwera, chodzi tylko o to, jak wykonalibyśmy serializację lub deserializację, dlatego nie obejmuje obsługi błędów i używany jest pojedynczy komunikat.

 import socket import pickle s = socket.socket() s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept() data = conn.recv (1024) print ("Dane odebrano: ", dane) print (" Zdeserializowany: ", pickle.loads (dane)) s.close ()
Widzimy, że wszystko działa jak z normalnymi gniazdami, tylko że odebrane dane przyjdą zserializowane, więc deserializujemy je funkcją masa, jak widać nazywa się to tak samo jak w module marszałka. Wreszcie zobaczymy klienta:
 import socket import pickle s = socket.socket() data = [1, 2, 3, 4] objectBytes = pickle.dumps (data) s.connect (("localhost", 2016)) s.send (objectBytes) s. blisko ()
Nie ma większych komplikacji, serializujemy obiekt za pomocą depresja i wysyłamy go do utworzonego gniazda. Poniżej zostawiam dane wyjściowe serwera, gdy klient się łączy, dane wyjściowe klienta są ignorowane, ponieważ nic nie pokazują.

Jak dotąd pojawił się samouczek dotyczący serializacji i deserializacji danych w Pythonie, ponieważ wiemy, że ten język znacznie ułatwia nam pracę.

NotatkaSamouczek korzysta z wersji Python 3.5.

Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave