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.
Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка