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