Загрузка данных из фала pickle.
Загрузка данных из фала pickle. Теперь переключитесь во вторую консоль Python — т. е. не в ту где вы создали словарь entry. > > > shell ① ① Это вторая консоль Python ② Здесь не определена переменная entry. Вы определяли переменную entry в первой консоли Python, но это полностью отличное окружение со своим собственным состоянием. ③ Откроем entry. pickle файл, который вы создали в первой консоли Python. Модуль pickle использует двоичный формат представления данных, поэтому вам всегда нужно открывать файл в двоичном режиме. ④ Функция pickle. load() принимает на вход поток, читает сериализованные данные из потока, создает новый объект Python, восстанавливает сериализованные данные в новый объект Python, и возвращает новый объект Python. ⑤ Теперь переменная entry — это словарь со знакомыми ключами и значениями. Результат цикла pickle. dump()/pickle. load() это новая структура данных эквивалентная оригинальной структуре данных. > > > shell ① ① Переключитесь обратно в первую консоль Python. ② Откройте entry. pickle файл ③ Загрузите сериализованные данные в новую переменную entry2
④ Python подтверждает, что эти два словаря(entry и entry2) эквивалентны. В этой консоли вы создали entry с нуля, начиная с пустого словаря вручную присваивая значения ключам. Вы сериализовали этот словарь и сохранили в файле entry. pickle. Теперь вы считали сериализованные данные из этого фала и создали совершенную копию оригинальной структуры. ⑤ Эквивалентность не значит идентичности. Я сказал, что вы создали _идеальную копию_ оригинальной структуры данных, и это правда. Но это все же копия. ⑥ По причинам которые станут ясны в дальнейшем, я хочу указать, что значения ключа 'tags' это кортеж, и значение 'internal_id' это объект bytes.
Используем Pickle без файлов Пример из предыдущей секции показал как сериализовать объект напрямую в файл на диске. Но что если он вам не нужен или вы не хотели использовать файл? Вы можете сериализовать в объект bytes в памяти. > > > shell ① Функция pickle. dumps() (обратите внимание на 's' в конце имени функции) делает ту же самую сериализацию что и функция pickle. dump(). Вместо того чтобы принимать на вход поток и писать сериализованные данные на диск, она просто возвращает сериализованные данные ② Поскольку протокол pickle использует двоичный формат данных, функция pickle. dumps() возвращает объект типа bytes. ③ Функция pickle. loads() (снова заметьте 's' в конце имени функции) делает ту же самую десериализацию что и функция pickle. load(). Но вместо того чтобы принимать на вход поток и читать сериализованные данные из файла, она принимает на вход объект типа bytes содержащий сериализованные данные, такие как возвращаемые функцией pickle. dumps()
④ Конечный результат таков же: идеальная копия оригинального словаря. Байты и строки снова вздымают свои уродливые головы Протокол pickle существует уже много лет, и он развивался вместе с тем как развивался сам Python. Сейчас существует четыре различных версии протокола pickle.
Вау смотрите, разница между строками и байтами снова вздымает свою уродливую голову. (Если вы удивлены, вы не уделяли достаточно внимания. ) На практике это значит, что в то время, как Python 3 может читать данные сохраненные при помощи протокола версии 2, Python 2 не может читать данные сохраненные при помощи протокола версии 3.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|