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 2que possa ser lido pelo Python 2.
Verifique o protocolparâmetro em pickle.dump. Seu código resultante será semelhante a este.
pickle.dump(your_object, your_file, protocol=2)
Não há protocolparâmetro em pickle.loadporque picklepode determinar o protocolo do arquivo.
Pickle usa diferentes protocolspara 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 3para poder carregar os dados em python 2. Você pode especificar o protocolparâmetro ao invocar pickle.dump.
5que foi introduzido no Python 3.8 também que não é compatível com as versões anteriores.