pickle — Сериализация объектов Python

Модуль pickle преобразует любые стандартные объекты Python в поток байтов (сериализация) и обратно (десериализация). Это очень удобно для сохранения настроек, кэша нейросетей или сложных структур данных прямо в файлы.

⚠️ ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ: Формат pickle небезопасен. Разрешается "распаковывать" только файлы, созданные вами. Злоумышленник может внедрить произвольный код в .pkl файл, и этот код будет выполнен во время чтения. Никогда не читайте pickle-файлы из сети! Для обмена с другими серверами используйте json.

import pickle

Работа с файлами (dump и load)

import pickle

my_data = {
    'level': 14,
    'inventory': ['Меч', 'Щит', 'Зелье'],
}

# 1. Запись (Консервация)
# Обязательно используйте 'wb' (write binary)
with open('savefile.pkl', 'wb') as file:
    pickle.dump(my_data, file)

# 2. Чтение (Распаковка)
# Обязательно используйте 'rb' (read binary)
with open('savefile.pkl', 'rb') as file:
    loaded = pickle.load(file)

print(loaded['inventory']) # ['Меч', 'Щит', 'Зелье']

Работа со строками байт (dumps и loads)

Если файл сохранять не нужно, но нужно передать данные по внутренней доверенной сети или сохранить в СУБД:

import pickle

player = ["Воин", 100, 50.5]

# Превратить в байты
byte_stream = pickle.dumps(player)
print(byte_stream) # b'\x80\x04\x95...'

# Прочитать из байт
original = pickle.loads(byte_stream)

Что МОЖНО сериализовать?

Что НЕЛЬЗЯ сериализовать?


Полный справочник API (API Reference)

Функции сериализации

Функция Описание
pickle.dump(obj, file, protocol=None) Конвертирует объект obj в байты и записывает их в открытый бинарный файл file.
pickle.dumps(obj, protocol=None) Возвращает объект в виде чистой строки байтов bytes без записи на диск.
pickle.load(file) Читает бинарный файл file и реконструирует объект Python.
pickle.loads(bytes_object) Читает объект из переменной типа байт bytes.

Классы Pickler / Unpickler

Предназначены для продвинутого ООП-использования.

Класс Описание
pickle.Pickler(file) Принимает бинарный файл, обладает методом .dump(obj).
pickle.Unpickler(file) Обладает методом .load().