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
.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ