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 2que Python 2 pueda leer.
Verifique el protocolparámetro en pickle.dump. Su código resultante se verá así.
pickle.dump(your_object, your_file, protocol=2)
No hay ningún protocolparámetro en pickle.loadporque picklepuede determinar el protocolo del archivo.
Pickle utiliza diferentes protocolspara 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 3para poder cargar los datos en python 2. Puede especificar el protocolparámetro al invocar pickle.dump.
5que también se introdujo en Python 3.8 que no es compatible con versiones anteriores.