В 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 отвечает за сериализацию и функцию десериализации загрузок (обе получают объект для блокировки). Очень просто, как вы видели. Тогда я оставляю захват его исполнения:
И вот мы завершаем первый пример.
Пример 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, то увидим следующее:
Работать в сети не намного сложнее, просто помните о небольшом ограничении совместимости между версиями 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. закрыть ()Это не имеет серьезных сложностей, мы сериализуем объект с дампами и отправляем его в созданный сокет. Затем я оставляю выход сервера, когда клиент подключен, выход клиента пропускается, так как он ничего не показывает.
Пока это учебник по сериализации и десериализации данных в Python, так как мы знаем, что этот язык значительно облегчает нам задачу.
примечание
Учебник использует Python версии 3.5 .
- 0
СТАТЬИ