2013-03-30 11 views
14

In questo modo il codice èpickle.load() alzando EOFError in Windows

with open(pickle_f, 'r') as fhand: 
    obj = pickle.load(fhand) 

Questo funziona bene su sistemi Linux, ma non su Windows. Mostra EOFError. Devo usare la modalità rb per farlo funzionare su Windows .. ora questo non funziona su Linux.

Perché questo sta accadendo e come risolverlo?

+0

Quando hai creato l'oggetto pickle, su quale sistema operativo l'hai creato? Linux o Windows? Non penso che potresti creare un oggetto pickle su un sistema e caricarlo da altri – Rush

+0

@Rush Il codice è stato inizialmente scritto su Linux .. I (nuovo sviluppo) funziona in Windows ... ma dal momento che è un progetto Django, ho generato tutto di nuovo sul mio sistema .. – Surya

+0

@Rush, certo che puoi. finché si aprono file in modalità binaria su entrambe le estremità, per evitare incompatibilità di nuova linea. – shx2

risposta

25

Utilizzare sempre la modalità b durante la lettura e la scrittura di sottaceti (open(f, 'wb') per la scrittura, open(f, 'rb') per la lettura). Per "correggere" il file che hai già, converti le sue nuove righe usando dos2unix.

+1

Non funziona su Windows così dovrebbe fare unix2dos – Rush

+1

il mio male! interpretato erroneamente – Rush

+0

non avrebbe funzionato 'r + b'? – Surya