marshal — Внутренняя сериализация объектов Python
Этот модуль содержит функции, которые могут читать и записывать значения Python в двоичном формате. Формат специфичен для Python, но независим от архитектуры машины (например, вы можете записать значение Python в файл на ПК, перенести файл на Sun и прочитать его обратно там). Подробности формата намеренно не документированы; он может меняться между версиями Python (хотя это происходит редко).
Это не общий модуль «хранения данных». Для общего хранения данных и передачи объектов Python через вызовы RPC см. модули pickle и shelve. Модуль marshal существует в основном для поддержки чтения и записи «псевдоскомпилированного» кода для модулей Python файлов .pyc. Поэтому разработчики Python оставляют за собой право изменять формат marshal несовместимым образом, если это потребуется. Если вы сериализуете и десериализуете объекты Python, используйте модуль pickle вместо этого — производительность сопоставима, независимость от версии гарантирована, и pickle поддерживает гораздо более широкий диапазон объектов, чем marshal.
Предупреждение
Модуль marshal не предназначен для обеспечения безопасности от ошибочных или злонамеренно сконструированных данных. Никогда не демаршализируйте данные, полученные из ненадежного или неаутентифицированного источника.
Не все типы объектов Python поддерживаются; в общем случае можно записать и прочитать только объекты, значение которых независимо от конкретного вызова Python. Поддерживаются следующие типы: булевы значения, целые числа, числа с плавающей точкой, комплексные числа, строки, байты, массивы байтов, кортежи, списки, множества, неизменяемые множества, словари и объекты кода, при этом следует понимать, что кортежи, списки, множества, неизменяемые множества и словари поддерживаются только в том случае, если значения, содержащиеся в них, сами поддерживаются. Также можно маршаллировать и демаршаллировать одиночные значения None, Ellipsis и StopIteration. Для формата версии ниже 3 рекурсивные списки, множества и словари не могут быть записаны (см. ниже).
Существуют функции, которые читают/записывают файлы, а также функции, работающие с объектами типа байты.
Модуль определяет следующие функции:
-
marshal.dump(value, file[, version]) -
Записать значение в открытый файл. Значение должно быть поддерживаемого типа. Файл должен быть записываемым двоичным файлом.
Если значение имеет (или содержит объект, который имеет) неподдерживаемый тип, генерируется исключение
ValueError— но в файл также будут записаны некорректные данные. Объект не будет правильно прочитан обратно функциейload().Аргумент version указывает формат данных, который
dumpдолжен использовать (см. ниже).Вызывает событие аудита аудита
marshal.dumpsс аргументамиvalue,version.
-
marshal.load(file) -
Прочитать одно значение из открытого файла и вернуть его. Если не найдено корректного значения (например, из-за несовместимого формата marshal другой версии Python), генерируется исключение
EOFError,ValueErrorилиTypeError. Файл должен быть читаемым двоичным файлом.Вызывает событие аудита аудита
marshal.loadбез аргументов.Примечание
Если объект, содержащий неподдерживаемый тип, был маршаллирован с помощью
dump(),load()заменитNoneна немаршаллируемый тип.Изменено в версии 3.10: Этот вызов ранее вызывал событие аудита
code.__new__для каждого объекта кода. Теперь он вызывает единственное событие аудитаmarshal.loadдля всей операции загрузки.
1 Название этого модуля происходит от термина, используемого разработчиками Modula-3 (и другими), которые используют термин «маршаллирование» для передачи данных в самодостаточной форме. Строго говоря, «маршаллировать» означает преобразовать данные из внутреннего в внешний вид (например, в буфере RPC), а «демаршаллировать» — обратный процесс.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/marshal.html