#python #serialization #deserialization #pickle
Вопрос:
Я начал узнавать о модуле pickle, используемом для сериализации и десериализации объектов. Я знаю этот огурец.дамп используется для хранения кода в виде потока битов (сериализация) и рассола.загрузка создает поток битов обратно в объект python. (десериализация). Но что такое свалки и нагрузки, и в чем разница между ними и свалкой и нагрузкой? Я просмотрел документацию, но мне трудно отличить одно от другого.
соленый огурец.дампы(obj, протокол=Нет, *, fix_imports=True, buffer_callback=Нет) ; Возвращают маринованное представление объекта obj в виде байтового объекта вместо записи его в файл.
соленый огурец.загрузки(данные, /, *, fix_imports=True, кодировка=»ASCII», ошибки=»строгие», буферы=Нет) Возвращают восстановленную иерархию объектов данных маринованного представления объекта. данные должны быть объектом, подобным байтам.
Ценю любую помощь, спасибо
Комментарии:
1. _ вместо того, чтобы записывать это в файл. _ вот в чем все дело.
load
иdump
считывать или записывать в файлы (или любой объект, который выглядит как файловый объект). Если вы не хотите использовать файлы,loads
dumps
используйтеbytes
объекты. Буква «s» означает строку и возвращает нас к python 2.x, где байты и строки были в основном одним и тем же.
Ответ №1:
Разница между dump
и dumps
заключается в том, что dump
маринованный объект записывается в открытый файл и dumps
возвращает маринованный объект как bytes
. Файл должен быть открыт для записи в двоичном режиме. Маринованная версия объекта в точности совпадает с обоими dump
и dumps
.
Итак, если вы сделали следующее для объекта obj
:
with open("pickle1", "wb") as f:
pickle.dump(obj, f)
with open("pickle2", "wb") as f:
f.write(pickle.dumps(obj))
в итоге вы получите два файла с точно таким же содержимым.
То же самое относится и к загрузке — load
«распаковывает» открытый (читаемый) файловый объект и loads
использует bytes
объект.