рассол.сброс/загрузка против рассола.отвалы/грузы

#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 объект.