Сохранение данных Python - модуль Marshal
Функции сериализации объектов модуля marshal в стандартной библиотеке Python аналогичны модулю pickle. Однако этот модуль не используется для данных общего назначения. С другой стороны, он используется самим Python для внутренней сериализации объектов Python для поддержки операций чтения / записи в скомпилированных версиях модулей Python (файлы .pyc).
Формат данных, используемый модулем marshal, несовместим с версиями Python. Следовательно, скомпилированный скрипт Python (файл .pyc) одной версии, скорее всего, не будет выполняться в другой.
Как и модуль pickle, модуль marshal также определил функции load () и dump () для чтения и записи упорядоченных объектов из / в файл.
дамп ()
Эта функция записывает байтовое представление поддерживаемого объекта Python в файл. Сам файл является двоичным файлом с разрешением на запись
load ()
Эта функция считывает байтовые данные из двоичного файла и преобразует их в объект Python.
В следующем примере демонстрируется использование функций dump () и load () для обработки объектов кода Python, которые используются для хранения предварительно скомпилированных модулей Python.
В коде используется встроенный compile() функция для создания объекта кода из исходной строки, которая включает инструкции Python.
compile(source, file, mode)
Параметр file должен быть файлом, из которого был прочитан код. Если он не был прочитан из файла, передайте любую произвольную строку.
Параметр режима - это «exec», если источник содержит последовательность операторов, «eval», если есть одно выражение, или «single», если он содержит единственный интерактивный оператор.
Затем объект кода компиляции сохраняется в файле .pyc с помощью функции dump ().
import marshal
script = """
a=10
b=20
print ('addition=',a+b)
"""
code = compile(script, "script", "exec")
f=open("a.pyc","wb")
marshal.dump(code, f)
f.close()
Для десериализации объект из файла .pyc использует функцию load (). Поскольку он возвращает объект кода, его можно запустить с помощью другой встроенной функции exec ().
import marshal
f=open("a.pyc","rb")
data=marshal.load(f)
exec (data)