Uso pickle per eseguire il dump di un file su python 3 e utilizzo pickle per caricare il file su python 2, viene visualizzato ValueError.
Quindi, python 2 pickle non può caricare il file scaricato da python 3 pickle?
Se lo voglio? Come fare?
Uso pickle per eseguire il dump di un file su python 3 e utilizzo pickle per caricare il file su python 2, viene visualizzato ValueError.
Quindi, python 2 pickle non può caricare il file scaricato da python 3 pickle?
Se lo voglio? Come fare?
Risposte:
Dovresti scrivere i dati in salamoia con un numero di protocollo inferiore in Python 3. Python 3 ha introdotto un nuovo protocollo con il numero 3
(e lo usa come predefinito), quindi torna a un valore 2
che può essere letto da Python 2.
Controllare il protocol
parametro in pickle.dump
. Il codice risultante sarà simile a questo.
pickle.dump(your_object, your_file, protocol=2)
Non è presente alcun protocol
parametro pickle.load
perché pickle
può determinare il protocollo dal file.
Pickle usa diversi protocols
per convertire i tuoi dati in un flusso binario.
In pitone 2 ci sono 3 diversi protocolli ( 0
, 1
, 2
) e il valore predefinito è 0
.
In Python 3 sono 5 differenti protocolli ( 0
, 1
, 2
, 3
, 4
) e il valore predefinito è 3
.
È necessario specificare in python 3 un protocollo inferiore 3
a per poter caricare i dati in python 2. È possibile specificare il protocol
parametro durante la chiamata pickle.dump
.
5
che è stato introdotto anche in Python 3.8 che non è compatibile con le versioni precedenti.