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 2che può essere letto da Python 2.
Controllare il protocolparametro in pickle.dump. Il codice risultante sarà simile a questo.
pickle.dump(your_object, your_file, protocol=2)
Non è presente alcun protocolparametro pickle.loadperché picklepuò determinare il protocollo dal file.
Pickle usa diversi protocolsper 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 3a per poter caricare i dati in python 2. È possibile specificare il protocolparametro durante la chiamata pickle.dump.
5che è stato introdotto anche in Python 3.8 che non è compatibile con le versioni precedenti.