Как да сериализирате и десериализирате данни в Python

Python има няколко начина за сериализиране / десериализиране на данни. В този урок ще видим модула маршал и модула cpickle. Преди да разгледаме как да сериализираме в Python, нека накратко обясним тази концепция. Сериализацията е широко използван процес за запазване на обекти във файл или база данни или за изпращането им по мрежата.

Време е да започнем с урока, ще видим пример с всеки модул.

1. Маршалски модул


Преди да започнете, трябва да знаете, че този модул не гарантира съвместимост между различните версии на компилатора на Python.

Пример 1
Нека видим първия, много прост пример:

 импортиране на маршал данни = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Десериализирано:", objectLoad)
Като първа стъпка импортираме библиотеката marshal, създадохме списък, който ще сериализираме, след което го рисуваме и десериализираме. Функцията сметища се грижи за сериализацията и функцията натоварвания за десериализиране (и двамата получават обекта за заключване). Много лесно, както видяхте. Ето екранна снимка на изпълнението му:

И тук завършваме с първия пример.

Пример 2
В този пример ще запишем обект във файл.

 импортиране на маршал данни = [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 ("Десериализирано:", dataLoad) fileIn.close () 
Импортирането и списъкът се запазват, само сега ще използваме файлове, отваряме файл за писане, б е за байтове и изхвърляме списъка (сега функцията е сметище и получава данните за запис и файла), когато приключим, го затваряме. За да завършим, отваряме същия файл в режим на четене и четем от него (имайте предвид, че функцията е натоварване, и който получава файла като параметър), за да завършим, затваряме файла.

Ако погледнем файла file.dat, ще видим следното:

Работата в мрежа не е много по -трудна, просто помнете малкото ограничение за съвместимост между версиите на Python. Нека преминем към другия модул.

2. Cpickle модул


Този модул е ​​написан на C, има друг, наречен pickle, който е разработен в Python, но е по -бавен, затова е препоръчително да използвате cpickle. За разлика от marshal, този модул ще гарантира съвместимост между версиите на Python, така че преди програмирането трябва да вземем предвид тези неща.

ЗабележкаВ Python 3 cPickle е преименуван на _pickle и се използва автоматично от модула за туршия.

За този модул ще видим пример, в който използваме сокети, ще видим кода на сървъра, става въпрос само за това как бихме извършили сериализацията или десериализацията, затова той не включва обработка на грешки и се използва единично съобщение.

 import socket import pickle s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Данни получено: ", данни) print (" Десериализирано: ", pickle.loads (данни)) s.close ()
Виждаме, че всичко работи както с нормалните сокети, само че получените данни ще пристигнат сериализирани, затова го десериализираме с функцията натоварвания, както можете да видите, се нарича същото като в модула на маршала. Накрая ще видим клиента:
 import socket import pickle s = socket.socket () data = [1, 2, 3, 4] objectBytes = pickle.dumps (data) s.connect (("localhost", 2016)) s.send (objectBytes) s. близо ()
Няма големи усложнения, сериализираме обекта с сметища и го изпращаме до създадения гнездо. По -долу оставям изхода на сървъра, когато клиентът се свърже, изходът на клиента се игнорира, тъй като не показва нищо.

Дотук идва урокът за сериализиране и десериализиране на данни в Python, тъй като знаем, че този език прави нещата много по -лесни за нас.

ЗабележкаУрокът използва версията на Python 3.5.

Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка
wave wave wave wave wave