Utilizo pickle para volcar un archivo en python 3, y utilizo pickle para cargar el archivo en python 2, aparece ValueError.
Entonces, ¿Python 2 pickle no puede cargar el archivo descargado por Python 3 pickle?
Si lo quiero ¿Cómo hacer?
Utilizo pickle para volcar un archivo en python 3, y utilizo pickle para cargar el archivo en python 2, aparece ValueError.
Entonces, ¿Python 2 pickle no puede cargar el archivo descargado por Python 3 pickle?
Si lo quiero ¿Cómo hacer?
Respuestas:
Debes escribir los datos en escabeche con un número de protocolo más bajo en Python 3. Python 3 introdujo un nuevo protocolo con el número 3
(y lo usa como predeterminado), así que vuelve a un valor 2
que Python 2 pueda leer.
Verifique el protocol
parámetro en pickle.dump
. Su código resultante se verá así.
pickle.dump(your_object, your_file, protocol=2)
No hay ningún protocol
parámetro en pickle.load
porque pickle
puede determinar el protocolo del archivo.
Pickle utiliza diferentes protocols
para convertir sus datos en un flujo binario.
En Python 2 hay 3 protocolos diferentes ( 0
, 1
, 2
) y el valor predeterminado es 0
.
En Python 3 hay 5 protocolos diferentes ( 0
, 1
, 2
, 3
, 4
) y el valor predeterminado es 3
.
Debe especificar en python 3 un protocolo más bajo que 3
para poder cargar los datos en python 2. Puede especificar el protocol
parámetro al invocar pickle.dump
.
5
que también se introdujo en Python 3.8 que no es compatible con versiones anteriores.