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

{title}

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

Пришло время начать с учебника, мы увидим пример с каждым модулем.

1. Маршал модуль


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

Пример 1
Давайте посмотрим на первый пример, очень простой:

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

{title}

И вот мы завершаем первый пример.

Пример 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 () 
Импорт и список сохраняются, только теперь мы собираемся использовать файлы, открываем файл для записи, b - для байтов, и выкидываем список (теперь функция является dump и получает данные для записи и файл), когда Мы заканчиваем, мы закрываем это. Чтобы закончить, мы открываем тот же файл в режиме чтения и читаем из него (обратите внимание, что функция загружена, и что он получает файл в качестве параметра), чтобы закрыть, мы закрываем файл.

Если мы посмотрим на файл file.dat, то увидим следующее:

{title}

Работать в сети не намного сложнее, просто помните о небольшом ограничении совместимости между версиями Python. Давайте перейдем к другому модулю.

2. модуль cpickle


Этот модуль написан на C, есть еще один, называемый pickle, который разработан на Python, но он медленнее, поэтому рекомендуется использовать cpickle. В отличие от маршала, этот модуль гарантирует совместимость между версиями Python, поэтому перед программированием мы должны принять это во внимание.

примечание

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

Для этого модуля мы увидим пример, в котором мы используем сокеты, мы увидим код сервера, речь идет только о том, как мы будем выполнять сериализацию или десериализацию, поэтому обработка ошибок не включена и используется одно сообщение.

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

{title}

Пока это учебник по сериализации и десериализации данных в Python, так как мы знаем, что этот язык значительно облегчает нам задачу.

примечание

Учебник использует Python версии 3.5 .

  • 0