Отладка файлов pickle. Сериализация объектов Python для чтения при помощи других языков
Отладка файлов pickle Как выглядит протокол pickle? Давайте ненадолго отложим консоль python и взглянем в файл entry. pickle, который мы создали. Для не вооруженного взгляда он выглядит как тарабарщина. you@localhost: ~/diveintopython3/examples$ ls -l entry. pickle Не слишком то полезно. Вы можете видеть строки, но остальные типы данных выглядят как непечатаемые (или как минимум не читаемые) символы. Поля даже не разделены хотя бы табуляцией или пробелами. Это не тот формат, который вы бы захотели отлаживать вручную. > > > shell Самая интересная часть информации в дизассемблере находится на последней строке, потому что она включает версию протокола, при помощи которого данный файл был сохранен. Не существует явного маркера протокола pickle. Чтобы определить какую версию протокола использовали для сохранения фала Pickle, вам необходимо заглянуть в маркеры(«opcodes») внутри сохраненных данных и использовать вшитую информацию о том какие маркеры были введены, в какой версии протокола Pickle. Функция pickletools. dis() делает именно это, и она печатает результат в последней строке дизассемблированного вывода. Вот функция, которая возвращает только номер версии, без вывода данных:
import pickletools def protocol_version(file_object): И вот она же в действии: Сериализация объектов Python для чтения при помощи других языков Формат данных используемый модулем pickle Python-зависимый. Он не пытается быть совместимым с другими языками программирования. Если межязыковая совместимость есть среди ваших потребностей, вам следует присмотреться к форматам сериализации. Один из таких форматов JSON. «JSON» это аббревиатура от «JavaScript Object Notation», но не позволяйте имени обмануть вас — JSON был наверняка разработан для использования многими языками программирования. Python 3 включает модуль json в стандартную библиотеку. Как и модуль pickle, модуль json имеет функции для сериализации структур данных, сохранения сериализованных данных на диск, загрузки сериализованных данных с диска, и десереализации данных обратно в новый объект Python. Так же существует несколько важных различий. Первое, формат данных json текстовый, а не двоичный. RFC 4627 определяет формат json и то, как различные типы данных должны быть преобразованы в текст. Например, логическое значение сохраняется как пяти символьная строка 'false' или четырех символьная строка 'true'. Все значения в json регистрочувствительные. Во — вторых, как и с любым текстовым форматом, существует проблема пробелов. JSON позволяет вставлять произвольное количество пробелов (табуляций, переводов строк, и пустых строк) между значениями. Пробелы в нем «незначащие», что значит, кодировщики JSON могут добавлять так много или так мало пробелов как захотят, и декодировщики JSON будут игнорировать пробелы между значениями. Это позволяет вам использовать красивый вывод(pretty-print) для отображения ваших данных в формате JSON, удобно отображать вложенные значения различными уровнями отступа так чтобы вы могли читать все в стандартном просмотрщике или текстовом редакторе. Модуль json в Python имеет опции красивого вывода во время кодирования данных.
В — третьих, существует многолетняя проблема кодировок. JSON хранит значения как обычный текст, но, как вы знаете, не существует таких вещей как «обычный текст». JSON должен быть сохранен в кодировке Unicode(UTF-32, UTF-16, или стандартной UTF-8), и секция 3 из RFC 4627 определяет то, как указать используемую кодировку.
Воспользуйтесь поиском по сайту: ![]() ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|