Как сделать, чтобы укроп загрузить Python2 Pickle в Python3 - PullRequest
1 голос
/ 02 июля 2019

Если мариновано с использованием pickle, то работает следующий фрагмент.но если у меня есть объект, выгруженный с помощью укропа, dill.load не работает, потому что dill.load не принимает аргумент encoding.Есть ли способ сделать это с помощью укропа?

with open(‘py2pickle.p’,'rb') as f
    data = pickle.load(f, encoding='latin1')

1 Ответ

1 голос
/ 03 июля 2019

Вы сделали dill.dump в Python 2, и хотите сделать dill.load в Python 3. Есть две проблемы:

  1. нет гарантии, независимо от того, кто вы используя для сериализации, что рассол будет работать с любой версией Python, отличный от того, который вы использовали (т.е. 3,7 против 3,6 против 2,7).

  2. , как вы заметили, в настоящее время dill не имеет аргумента кодировки для load, поэтому вам может потребоваться выполнить какое-либо преобразование до / после dump / load объекта (непосредственно на сам объект).

Обратите внимание, что я добавлю больше аргументов опции сериализации в dump и load в самом ближайшем будущем (включая аргумент encoding).

Обновление: dill теперь содержит аргумент кодирования, а также другие аргументы, помогающие преобразованию маринада из 2.x в 3.x.

...