8.1 Что такое сериализация
После того как вы научились работать с файлами, сохранять и читать данные, настало время научиться работать с файлами серьёзно. Сегодня мы с вами начнем изучать сериализацию.
Сериализация — это процесс преобразования объекта в последовательность байтов или формат, который можно сохранить в файл, передать по сети или сохранить в базе данных. Десериализация — это обратный процесс, при котором из этой последовательности байтов восстанавливается исходный объект.
Чтобы сохранить объект в файл (или передать его по сети), нужно преобразовать его в некую строку (или набор байт), которую будет легко записать в файл (и считать из файла) или передать по сети.
Вот 4 основных направления, где используется сериализация:
- Сохранение состояния объектов: Чтобы сохранить состояние объекта между запусками программы.
- Передача данных: Чтобы передавать объекты по сети между различными компонентами системы или между разными системами.
- Кэширование: Чтобы сохранить объекты в кэше для быстрого доступа.
- Базы данных: Чтобы хранить сложные структуры данных в базах данных.
Библиотек, которые занимаются сериализацией, очень много, и каждая создана под свои нужды. Мы ознакомимся с пятью из них, а с двумя это знакомство будет очень подробным.
Рассмотрим наиболее популярные из них:
- Модуль
pickle - Модуль
json - Модуль
yaml - Модуль
marshal - Модуль
shelve
Ниже будет краткий обзор каждого из них:
8.2 Модуль pickle
pickle — это встроенный модуль для сериализации и десериализации объектов Python. Он позволяет сохранять и восстанавливать практически любые объекты Python, включая пользовательские классы.
Пример использования pickle:
import pickle
# Пример объекта для сериализации
data = {'name': 'Alice', 'age': 30, 'is_student': False}
# Сериализация объекта в файл
with open('data.pkl', 'wb') as file:
pickle.dump(data, file)
# Десериализация объекта из файла
with open('data.pkl', 'rb') as file:
loaded_data = pickle.load(file)
print(loaded_data)
8.3 Модуль json
json — это встроенный модуль для работы с JSON (JavaScript Object Notation). JSON — это текстовый формат, который используется для обмена данными между клиентом и сервером.
Пример использования json:
import json
# Пример объекта для сериализации
data = {'name': 'Bob', 'age': 25, 'is_student': True}
# Сериализация объекта в строку JSON
json_string = json.dumps(data)
print(json_string)
# Сериализация объекта в файл JSON
with open('data.json', 'w') as file:
json.dump(data, file)
# Десериализация объекта из строки JSON
loaded_data = json.loads(json_string)
print(loaded_data)
# Десериализация объекта из файла JSON
with open('data.json', 'r') as file:
loaded_data = json.load(file)
print(loaded_data)
8.4 Модуль yaml
yaml (YAML Ain't Markup Language) — это человекочитаемый формат сериализации данных. Для работы с YAML в Python используется сторонняя библиотека PyYAML.
Пример использования yaml:
import yaml
# Пример объекта для сериализации
data = {'name': 'Carol', 'age': 27, 'is_student': False}
# Сериализация объекта в строку YAML
yaml_string = yaml.dump(data)
print(yaml_string)
# Сериализация объекта в файл YAML
with open('data.yaml', 'w') as file:
yaml.dump(data, file)
# Десериализация объекта из строки YAML
loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
print(loaded_data)
# Десериализация объекта из файла YAML
with open('data.yaml', 'r') as file:
loaded_data = yaml.load(file, Loader=yaml.FullLoader)
print(loaded_data)
8.5 Модуль marshal
marshal — это встроенный модуль для сериализации объектов Python, который используется для сериализации кода Python. Он быстрее pickle, но поддерживает меньше типов объектов и не так гибок.
Пример использования marshal:
import marshal
# Пример объекта для сериализации
data = {'name': 'Dave', 'age': 35, 'is_student': True}
# Сериализация объекта в файл
with open('data.marshal', 'wb') as file:
marshal.dump(data, file)
# Десериализация объекта из файла
with open('data.marshal', 'rb') as file:
loaded_data = marshal.load(file)
print(loaded_data)
8.6 Модуль shelve
shelve — это встроенный модуль, который предоставляет простую возможность сохранять объекты Python в файлы с использованием хранилища на основе ключей, похожего на словарь.
Пример использования shelve:
import shelve
# Пример объекта для сериализации
data = {'name': 'Eve', 'age': 28, 'is_student': False}
# Сериализация объекта в файл
with shelve.open('data.shelve') as db:
db['person'] = data
# Десериализация объекта из файла
with shelve.open('data.shelve') as db:
loaded_data = db['person']
print(loaded_data)
И хотя сами модули и формат сохранения данных отличаются, работа с ними с точки зрения программиста очень похожа. Ниже мы более подробно разберем работу с модулем pickle и модулем json.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ