Какие основные способы сериализации и десериализации данных существуют в Python

Ответ

В Python существует несколько стандартных и сторонних библиотек для сериализации (преобразования объекта в поток байт или строку) и десериализации (обратного процесса).

1. json

Стандартный модуль для работы с текстовым форматом JSON. Это универсальный и человекочитаемый формат, идеальный для веб-API и обмена данными между системами на разных языках.

import json

data = {'name': 'Alice', 'age': 30}

# Сериализация в строку
json_string = json.dumps(data)

# Десериализация из строки
restored_data = json.loads(json_string)

2. pickle

Стандартный модуль для сериализации именно Python-объектов. Сохраняет объекты в бинарном формате, включая их типы и структуру.

Важно: pickle небезопасен. Не следует десериализовать данные из недоверенных источников, так как это может привести к выполнению произвольного кода.

import pickle

data = {'name': 'Alice', 'age': 30}

# Сериализация в байты
pickled_data = pickle.dumps(data)

# Десериализация из байт
restored_data = pickle.loads(pickled_data)

3. PyYAML (сторонняя библиотека)

Библиотека для работы с форматом YAML, который часто используется для конфигурационных файлов из-за его высокой читаемости.

# pip install pyyaml
import yaml

data = {'name': 'Alice', 'age': 30}

# Сериализация
yaml_string = yaml.dump(data)

# Десериализация (безопасный способ)
restored_data = yaml.safe_load(yaml_string)

Когда что использовать?

  • json: Для веб-API, обмена данными с другими языками, хранения простых данных.
  • pickle: Для сохранения состояния Python-объектов внутри одного приложения (например, для кэширования или временного хранения). Только с доверенными данными!
  • PyYAML: Для файлов конфигурации, которые должны легко читаться и редактироваться человеком.