Spec-Zone.ru › Python 3.5

marshal — Внутренняя сериализация объектов Python

Этот модуль содержит функции, которые могут читать и записывать значения Python в двоичном формате. Формат специфичен для Python, но независим от архитектуры компьютера (например, вы можете записать значение Python в файл на ПК, передать файл на Sun и прочитать его обратно). Детали формата намеренно не документированы; он может меняться между версиями Python (хотя это случается редко). [1]

Это не общий модуль «постоянства». Для общего постоянства и передачи объектов 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.load(file)

Прочитать одно значение из открытого файла и вернуть его. Если не найдено допустимое значение (например, потому что данные имеют несовместимый с версией Python формат marshal), возникает исключение EOFError, ValueError или TypeError. Файл должен быть читаемым двоичным файлом.

Примечание

Если объект, содержащий неподдерживаемый тип, был замаршален с помощью dump(), load() заменит None на немаршализуемый тип.

marshal.dumps(value[, version])

Вернуть объект типа bytes, который был бы записан в файл функцией dump(value, file). Значение должно быть поддерживаемого типа. Возбуждает исключение ValueError, если значение имеет (или содержит объект, который имеет) неподдерживаемый тип.

Аргумент version указывает формат данных, который dumps должен использовать (см. ниже).

marshal.loads(bytes)

Преобразовать объект типа bytes-like object в значение. Если допустимое значение не найдено, возбуждается EOFError, ValueError или TypeError. Дополнительные байты во входных данных игнорируются.

Кроме того, определены следующие константы:

marshal.version

Указывает формат, используемый модулем. Версия 0 — это исторический формат, версия 1 использует интернированные строки, а версия 2 использует двоичный формат для чисел с плавающей точкой. Версия 3 добавляет поддержку создания экземпляров объектов и рекурсии. Текущая версия — 4.

Примечания

[1] Название этого модуля происходит от немного специфической терминологии, используемой разработчиками Modula-3 (среди прочих), которые используют термин «маршаллинг» для передачи данных в самодостаточной форме. Строго говоря, «маршаллинг» означает преобразование данных из внутреннего в внешний вид (например, в буфере RPC), а «размаршаллинг» — обратный процесс.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.5/library/marshal.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API