Я использую 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
. Ваш результирующий код будет выглядеть так.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, который несовместим с более ранними версиями.