Сохранение и загрузка данных словарей Python: JSON vs pickle
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для быстрого сохранения словаря в Python используйте модуль json
:
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
, который удобен для взаимодействия с различными языками программирования.
Быстрый метод с использованием Pickle
Если читаемость на других языках и безопасность не критичны, выберите pickle
:
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 его можно отформатировать:
# Сохранение словаря с форматированием
with open('my_dict.json', 'w') as file:
json.dump({'key': 'value'}, file, indent=4, sort_keys=True) # Оформление важно!
Ищем альтернативы: ujson и klepto
Если требуется быстрая обработка данных, используйте ujson
вместо json
:
import ujson
# Сохранение словаря с ujson
with open('my_dict.json', 'w') as file:
ujson.dump({'key': 'value'}, file) # Ускоряем процесс!
Для гибкого хранения данных в виде словарей в файлах, директориях или базах данных подходит klepto
:
from klepto.archives import file_archive
# Сохранение словаря с klepto
my_dict = {'key': 'value'}
archive = file_archive('my_dict.klepto')
archive['my_dict'] = my_dict
archive.dump() # Выбор за вами!
Визуализация
Считайте словарь набором инструментов, где ключи и значения — это сами инструменты:
Ящик для инструментов (🧰): ['молоток'🔨: 'гвоздь', 'отвертка'🔧: 'винт', 'гаечный ключ'🔩: 'болт']
Хранение данных в Python:
- На полке: 🧰→🔖(Сериализация)→📚(Хранение) // Инструменты сериализуются и размещаются на "книжной полке" данных
- В помеченных коробках: 🧰→🏷️(Маркировка)→📦(Систематизация) // Каждый инструмент маркируется, после чего все систематизируется в маркированные коробки
С пылью в прахе, биты в байты
Когда файлы становятся слишком большими или сложными, возникает необходимость в специализированных методах сериализации/десериализации:
dill
: подходит для сохранения практически любых объектов Python, особенно комплексных.ujson
: обеспечивает максимально быструю обработку данных, когда важна каждая секунда.klepto
: предполагает структурированное хранение словарей в файлах, директориях или базах данных, актуально, когда очень важна четкая организация.
Важное примечание: Качественные методы кодирования и декодирования данных помогут избежать множества последствий.
Полезные материалы
- Структуры данных — Документация Python 3.12.2
- Словари в Python – Real Python
- pickle — Сериализация объектов Python — Документация Python 3.12.2
- shelve — Постоянное хранение объектов в Python — Документация Python 3.12.2
- sqlite3 — Интерфейс DB-API 2.0 для SQLite — Документация Python 3.12.2
- Документация по MongoDB