Я использую pickle для дампа файла на python 3 и использую pickle для загрузки файла на python 2, появляется ValueError.
Итак, python 2 pickle не может загрузить файл, сброшенный python 3 pickle?
Если я этого хочу? Как сделать?
Я использую pickle для дампа файла на python 3 и использую pickle для загрузки файла на python 2, появляется ValueError.
Итак, python 2 pickle не может загрузить файл, сброшенный python 3 pickle?
Если я этого хочу? Как сделать?
Ответы:
Вы должны записать обработанные данные с меньшим номером протокола в Python 3. Python 3 представил новый протокол с номером 3
(и использует его по умолчанию), поэтому вернитесь к значению, 2
которое может быть прочитано Python 2.
Проверьте protocol
параметр в pickle.dump
. Ваш результирующий код будет выглядеть так.
pickle.dump(your_object, your_file, protocol=2)
protocol
Параметр отсутствует, pickle.load
потому pickle
что протокол можно определить по файлу.
Pickle использует другое protocols
для преобразования ваших данных в двоичный поток.
В Python 2 есть 3 различных протоколов ( 0
, 1
, 2
) , и по умолчанию 0
.
В Python 3 есть 5 различных протоколов ( 0
, 1
, 2
, 3
, 4
) и по умолчанию 3
.
Вы должны указать в python 3 протокол ниже, чем 3
для того, чтобы иметь возможность загружать данные в python 2. Вы можете указать protocol
параметр при вызове pickle.dump
.
5
который также был введен в Python 3.8, который несовместим с более ранними версиями.