ho salamoia dati da 2,7 che ho in salamoia come questo:dati deserializzazione da Python 2 con stringhe Unicode in Python 3
#!/usr/bin/env python2
# coding=utf-8
import pickle
data = {1: datetime.date(2014, 3, 18),
'string-key': u'ünicode-string'}
pickle.dump(data, open('file.pickle', 'wb'))
L'unico modo che ho trovato per caricare questo in Python 3.4 è:
data = pickle.load(open('file.pickle', "rb"), encoding='bytes')
Ora la mia stringa unicode va bene ma i tasti dict sono bytes
. print(repr(data))
dà:
{1: datetime.date(2014, 3, 18), b'string-key': 'ünicode-string'}
Qualcuno ha un'idea per aggirare riscrivere il mio codice come data[b'string-key']
resp. convertire tutti i file esistenti?
Non è previsto che i dati sottoposti a picking funzionino su versioni e implementazioni ed è un metodo di serializzazione piuttosto scadente da utilizzare anche quando funziona a tutti i costi poiché esegue codice arbitrario. Hai preso in considerazione l'utilizzo di JSON, invece? – geoffspear
Ho una struttura più complessa che contiene dicts, tuple e tuple di tuple come valori e ho bisogno di confrontare le versioni dei dati salvati e con questo scopo le tuple sono molto più convenienti delle liste. Ma non ci sono tuple in JSON (e non ci sono anche date?). – TNT
@Wooble: [ma in generale pickle dovrebbe sempre essere il modo preferito per serializzare oggetti Python] (https://docs.python.org/3/library/pickle.html#comparison-with-marshal) –