I-Daten von 2,7 gebeizt habe, dass ich so gebeizt:Unpickling Daten von Python 2 mit Unicode-Strings 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'))
Der einzige Weg, ich 3.4 dies in Python laden gefunden ist:
data = pickle.load(open('file.pickle', "rb"), encoding='bytes')
Jetzt meine Unicode-Zeichenfolge sind in Ordnung, aber die dict-Tasten sind bytes
. print(repr(data))
gibt:
{1: datetime.date(2014, 3, 18), b'string-key': 'ünicode-string'}
jemand eine Idee Hat meinen Code wie data[b'string-key']
bzw. zu umgehen, neu zu schreiben. alle vorhandenen Dateien konvertieren?
Eingelegte Daten werden nicht über Versionen und Implementierungen hinweg funktionieren und sind eine ziemlich schlechte Serialisierungsmethode, die auch dann verwendet wird, wenn sie überhaupt funktioniert, weil sie willkürlichen Code ausführt. Haben Sie darüber nachgedacht, stattdessen JSON zu verwenden? – geoffspear
Ich habe eine komplexere Struktur, die Dicts, Tupel und Tupel von Tupeln als Werte enthält, und ich muss Versionen der gespeicherten Daten vergleichen, und zu diesem Zweck sind Tupel viel bequemer als Listen. Aber es gibt keine Tupel in JSON (und denke auch keine Daten?). – TNT
@Wooble: [aber im Allgemeinen sollte Pickle immer der bevorzugte Weg sein, um Python-Objekte zu serialisieren] (https://docs.python.org/3/library/pickle.html#comparison-with-marshal) –