Eu uso pickle para despejar um arquivo no python 3 e uso pickle para carregar o arquivo no python 2, o ValueError aparece.
Então, python 2 pickle não pode carregar o arquivo despejado por python 3 pickle?
Se eu quiser? Como fazer?
Eu uso pickle para despejar um arquivo no python 3 e uso pickle para carregar o arquivo no python 2, o ValueError aparece.
Então, python 2 pickle não pode carregar o arquivo despejado por python 3 pickle?
Se eu quiser? Como fazer?
Respostas:
Você deve escrever os dados em conserva com um número de protocolo inferior no Python 3. O Python 3 introduziu um novo protocolo com o número 3
(e o usa como padrão), então volte para um valor 2
que possa ser lido pelo Python 2.
Verifique o protocol
parâmetro em pickle.dump
. Seu código resultante será semelhante a este.
pickle.dump(your_object, your_file, protocol=2)
Não há protocol
parâmetro em pickle.load
porque pickle
pode determinar o protocolo do arquivo.
Pickle usa diferentes protocols
para converter seus dados em um fluxo binário.
Em pitão 2 existem 3 diferentes protocolos ( 0
, 1
, 2
) e o padrão é 0
.
Em pitão 3 existem 5 protocolos diferentes ( 0
, 1
, 2
, 3
, 4
) e o padrão é 3
.
Você deve especificar em python 3 um protocolo inferior a 3
para poder carregar os dados em python 2. Você pode especificar o protocol
parâmetro ao invocar pickle.dump
.
5
que foi introduzido no Python 3.8 também que não é compatível com as versões anteriores.