Unpickling un python 2 objet avec python 3

Je me demandais si il existe un moyen de charger un objet qui a été mariné dans Python 2.4, avec Python 3.4.

J'ai été en cours d'exécution 2to3 sur un grand nombre d'entreprise legacy code pour l'obtenir jusqu'à ce jour.

Ayant fait cela, lorsque vous exécutez le fichier j'obtiens l'erreur suivante:

  File "H:\fixers - 3.4\addressfixer - 3.4\trunk\lib\address\address_generic.py"
, line 382, in read_ref_files
    d = pickle.load(open(mshelffile, 'rb'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 1: ordinal
not in range(128)

À la recherche à la mariné objet en lice, c'est un dict dans un dict, contenant des clés et des valeurs de type str.

Donc ma question est: Est-il un moyen de charger un objet, à l'origine, marinés dans python 2.4, avec python 3.4?

  • Python 2.4 ont la json module? Peut-être que vous pourriez écrire un 2.4 script qui unpickles l'objet et l'enregistre comme un objet json, puis d'écrire un 3.4 script qui lit l'objet json et l'enregistre comme un 3,4-compatible pickle objet. Ce serait une opération unique que vous exécutez sur l'ensemble de vos cornichons fichiers.
  • Je pensais le long des lignes similaires, étant donné que ce sont dicts je pense que je pourrais juste changer sys.stdout vers un fichier et de les imprimer, mais je veux voir si je peux les charger en premier
  • Liés à la question d'avoir à faire avec datetimes en particulier: stackoverflow.com/questions/24805105/...
InformationsquelleAutor NDevox | 2015-01-29