2009-12-04 14 views
13

He creado un pequeño script de python. Guardé el archivo pickle en Linux y luego lo usé en Windows y luego lo volví a usar en Linux, pero ahora ese archivo no funciona en Linux pero funciona perfectamente en Windows. Is es para que python sea coss-platform pero el archivo pickle no lo es. ¿Hay alguna solución para esto?¿Está el archivo pickle de python multiplataforma?

+32

Python pickle posiblemente espinoso. Problemas de la plataforma Pickle potencialmente prevenibles. Presente una posible propuesta de prevención de problemas, por favor. – aehiilrs

Respuesta

23

Python's pickle es perfectamente multiplataforma.

Esto probablemente se deba a diferencias de EOL (fin de línea) entre Windows y Linux. Asegúrese de abrir sus archivos de pickle en modo binario tanto al escribirlos como al leerlos, usando los modos "wb" y "rb" de open(), respectivamente.

Nota: Pasar pepinillos entre diferentes versiones de Python puede causar problemas, por lo tanto intente tener la misma versión en ambas plataformas.

+0

'pickle' es [se garantiza que es" compatible con versiones anteriores "] (http://docs.python.org/2/library/pickle.html#relationship-to-other-python-modules). Supongo que esto significa que las versiones más nuevas leerán encurtidos de versiones anteriores, pero es posible que las versiones anteriores no puedan leer los encuadres de las versiones más recientes. – max

0

Puede usar json en lugar de pickle. Si puede guardar tus datos, sabes que es una plataforma cruzada.

+0

No bajamos, pero usar json para esta situación parece un poco incómodo. – ChristopheD

+1

Realmente depende de lo que esté guardando. Si se trata de listas de números y cadenas, JSON es genial. Si se trata de diccionarios e instancias de clase, no tanto. – steveha

+0

Estoy guardando instancias de clase – vikithakar

9

El pickle módulo supports several different data formats. Si especifica un formato de pepinillo en particular en lugar de usar el valor predeterminado (0), es posible que se encuentre con problemas de archivos binarios multiplataforma. Puede usar archivos de salmuera ASCII sin formato especificando el protocolo 0.

4

Pickle debe ser multiplataforma, hay problemas de control de versiones/(ver http://docs.python.org/library/pickle.html#data-stream-format), pero en general si está utilizando el mismo release de python en sus ventanas y cajas de Unix, deberían ser interoperables.

Si utiliza salmuera como un mecanismo de transporte de datos, es posible que desee considerar formatos menos específicas de la implementación para el almacenamiento de datos, tales como JSON, XML, CSV, yaml, etc.

0

Una idea interesante prueba es PyON (Notación de Objeto Python). La versión actual parece funcionar al menos para casos simples según mis pruebas. Sin embargo, parece haber habido algún desacuerdo en las listas de correo si el proyecto es una buena idea.

Cuestiones relacionadas