2009-12-04 14 views
13

Ho creato un mio piccolo script in pitone. Ho salvato il file pickle su Linux e poi l'ho usato su Windows e poi di nuovo su Linux, ma ora quel file non funziona su Linux ma funziona perfettamente su Windows. Is è così che python è coss-platform ma il file pickle non lo è. C'è qualche soluzione a questo ???Il file pickle di Python è multipiattaforma?

+32

Sottaceto di pitone, forse pungente. Problemi con la piattaforma di sottaceto potenzialmente prevenibili. Presentare la possibile proposta di prevenzione dei problemi, per favore. – aehiilrs

risposta

23

La salamoia di Python è perfettamente cross-platform.

Ciò è probabilmente dovuto alle differenze EOL (End-Of-Line) tra Windows e Linux. Assicurati di aprire i file pickle in modalità binaria sia quando li scrivi sia quando li leggi, usando rispettivamente le modalità "wb" e "rb" di open().

Nota: il passaggio di sottaceti tra diverse versioni di Python può causare problemi, quindi provare ad avere la stessa versione su entrambe le piattaforme.

+0

'pickle' è [garantito per essere" retrocompatibile "] (http://docs.python.org/2/library/pickle.html#relationship-to-other-python-modules). Presumo questo significa che le versioni più recenti leggeranno i sottaceti da versioni precedenti, ma le versioni precedenti potrebbero non essere in grado di leggere i sottaceti dalle versioni più recenti. – max

0

È possibile utilizzare json anziché pickle. Se può salvare i tuoi dati, sai che è multipiattaforma.

+0

Non downvoting, ma usare JSON per questa situazione sembra un po 'imbarazzante. – ChristopheD

+1

Dipende davvero da cosa sta salvando. Se sono tutti gli elenchi di numeri e stringhe, JSON è fantastico. Se si tratta di dizionari e istanze di classe, non così tanto. – steveha

+0

Sto salvando istanze di classe – vikithakar

9

Il modulo picklesupports several different data formats. Se si specifica un particolare formato di pickle invece di utilizzare il valore predefinito (0), è possibile che si verifichino problemi di file binari multipiattaforma. È possibile utilizzare file di pickle ASCII semplici specificando il protocollo 0.

4

Pickle deve essere multipiattaforma, esistono problemi di versioning/protocol, (vedere http://docs.python.org/library/pickle.html#data-stream-format) ma in generale se si sta utilizzando la stessa versione di python sulle finestre e unix box, dovrebbero essere interoperabili.

Se stai usando salamoia come meccanismo di trasporto dei dati, si potrebbe prendere in considerazione i formati meno di attuazione specifiche per la memorizzazione dei dati, come ad esempio JSON, XML, CSV, YAML, ecc

0

Un interessante idea di prova è PyON (Notazione oggetto Python). La versione attuale sembra funzionare almeno per casi semplici secondo i miei test. Sembra che ci sia stato qualche disaccordo sulle mailing list, anche se il progetto è una buona idea.

Problemi correlati