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