Сохранение и загрузка данных словарей Python: JSON vs pickle

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для быстрого сохранения словаря в Python используйте модуль json:

Python
Скопировать код
import json

# Сохранение словаря
with open('my_dict.json', 'w') as file:
    json.dump({'key': 'value'}, file)  # Ключи и значения значимы!

# Загрузка словаря
with open('my_dict.json', 'r') as file:
    data = json.load(file)  # Загрузка данных!

Функция json.dump() записывает данные, а json.load() — считывает данные в формате .json, который удобен для взаимодействия с различными языками программирования.

Кинга Идем в IT: пошаговый план для смены профессии

Быстрый метод с использованием Pickle

Если читаемость на других языках и безопасность не критичны, выберите pickle:

Python
Скопировать код
import pickle

# Сохранение словаря
with open('my_dict.pkl', 'wb') as file:
    pickle.dump({'key': 'value'}, file)  # Работаем с данными.

# Загрузка словаря обратно
with open('my_dict.pkl', 'rb') as file:
    data = pickle.load(file)  # Читаем данные!

Примечание: В pickle используйте режимы 'wb' и 'rb' для бинарной записи и чтения соответственно.

Читаемый JSON для людей

Для улучшения читаемости JSON его можно отформатировать:

Python
Скопировать код
# Сохранение словаря с форматированием
with open('my_dict.json', 'w') as file:
    json.dump({'key': 'value'}, file, indent=4, sort_keys=True)  # Оформление важно!

Ищем альтернативы: ujson и klepto

Если требуется быстрая обработка данных, используйте ujson вместо json:

Python
Скопировать код
import ujson

# Сохранение словаря с ujson
with open('my_dict.json', 'w') as file:
    ujson.dump({'key': 'value'}, file)  # Ускоряем процесс!

Для гибкого хранения данных в виде словарей в файлах, директориях или базах данных подходит klepto:

Python
Скопировать код
from klepto.archives import file_archive

# Сохранение словаря с klepto
my_dict = {'key': 'value'}
archive = file_archive('my_dict.klepto')
archive['my_dict'] = my_dict
archive.dump()  # Выбор за вами!

Визуализация

Считайте словарь набором инструментов, где ключи и значения — это сами инструменты:

Markdown
Скопировать код
Ящик для инструментов (🧰): ['молоток'🔨: 'гвоздь', 'отвертка'🔧: 'винт', 'гаечный ключ'🔩: 'болт']

Хранение данных в Python:

Markdown
Скопировать код
- На полке: 🧰→🔖(Сериализация)→📚(Хранение) // Инструменты сериализуются и размещаются на "книжной полке" данных

- В помеченных коробках: 🧰→🏷️(Маркировка)→📦(Систематизация) // Каждый инструмент маркируется, после чего все систематизируется в маркированные коробки

С пылью в прахе, биты в байты

Когда файлы становятся слишком большими или сложными, возникает необходимость в специализированных методах сериализации/десериализации:

  • dill: подходит для сохранения практически любых объектов Python, особенно комплексных.
  • ujson: обеспечивает максимально быструю обработку данных, когда важна каждая секунда.
  • klepto: предполагает структурированное хранение словарей в файлах, директориях или базах данных, актуально, когда очень важна четкая организация.

Важное примечание: Качественные методы кодирования и декодирования данных помогут избежать множества последствий.

Полезные материалы

  1. Структуры данных — Документация Python 3.12.2
  2. Словари в Python – Real Python
  3. pickle — Сериализация объектов Python — Документация Python 3.12.2
  4. shelve — Постоянное хранение объектов в Python — Документация Python 3.12.2
  5. sqlite3 — Интерфейс DB-API 2.0 для SQLite — Документация Python 3.12.2
  6. Документация по MongoDB