Строки могут быть легко записаны и считаны из файла. Числа требуют немного больше усилий, так как метод 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, поступающих из ненадежного источника, может выполнить произвольный код, если данные были созданы опытным злоумышленником.