Сообщить об ошибке.

Чтение и сохранение в файл списков и словарей в Python

Строки могут быть легко записаны и считаны из файла. Числа требуют немного больше усилий, так как метод file.read() возвращает только строки, которые должны быть переданы функции int(), которая принимает строку типа '123' и возвращает ее числовое значение 123. Когда вы хотите сохранить более сложные типы данных, такие как вложенные списки и словари, разбор и сериализация вручную усложняются.

Вместо того, чтобы пользователи постоянно писали и отлаживали код для сохранения сложных типов данных в файлы, Python позволяет использовать популярный формат обмена данными, называемый JSON (JavaScript Object Notation). Стандартный модуль, называемый json, может принимать иерархии данных Python и преобразовывать их в строковые представления. Этот процесс называется сериализацией. Восстановление данных из строкового представления называется десериализацией. Между сериализацией и десериализацией строка, представляющая объект, может быть сохранена в файле или отправлена по сетевому соединению на какой-либо удаленный компьютер.

Если у вас есть объект x, вы можете просмотреть его строковое представление JSON с помощью простой строки кода:

>>> import json
>>> json.dumps([1, 'simple', 'list'])
# '[1, "simple", "list"]'

Другой метод этого модуля json.dump() просто сериализует объект в текстовый файл. Итак, если объект fp текстового файла открыт для записи, мы можем сделать следующее:

json.dump(x, fp)

Чтобы снова декодировать объект, если fp это объект текстового файла, который был открыт для чтения:

x = json.load(fp)

Этот простой метод сериализации может обрабатывать списки и словари, но сериализация произвольных экземпляров классов в JSON требует дополнительных усилий.

Дополнительно смотрите встроенный модуль pickle. В отличие от JSON, pickle - это протокол, который позволяет сериализовать произвольно сложные объекты Python.

Протокол pickle специфичен для Python и не может использоваться для связи с приложениями, написанными на других языках. Он также по умолчанию небезопасен! Десериализация данных pickle, поступающих из ненадежного источника, может выполнить произвольный код, если данные были созданы опытным злоумышленником.