2017-09-30 2 views
0

J'ai un dictionnaire python dans un fichier dans un format comme celui-ci:un cornichon dictonary en python dans un format lisible

(dp0 S'Test » p1 S'Test1' p2 sS'Test2 ' p3 S'Test2' p4 sS'Starspy ' p5 S'SHSN4N' p6 s

voir:. Save a dictionary to a file (alternative to pickle) in Python?

et je veux le relire. Selon la question dans le lien, ceci a été créé en le sauvegardant avec du pickle. Mais, quand j'essaie d'enregistrer un dictionnaire avec pickle le format que j'obtiens ne correspond pas.

Par exemple, le code.

import pickle 
mydict = {'a': 1, 'b': 2, 'c': 3} 
output = open('myfile.dict', 'wb') 
pickle.dump(mydict, output) 
output.close() 

produit un fichier avec le contenu

de €} q (X aqKX bqKX cqKu

je peux relire OK, mais il a pas le format de mon fichier (qui correspond à un dictionnaire imbriqué) Donc, j'ai deux questions:

D'abord, comment puis-je écrire un fichier au format ... (dp0 S'Test ' S'Test1' p1 sS'Test2' p2 p3 S'Test2' p4 sS'Starspy' p5 S'SHSN4N » p6 s. ? Deuxièmement, comment puis-je lire un fichier avec ce format?

+0

Si vous voulez une version lisible par l'homme, pourquoi ne pas utiliser JSON à la place? – jonrsharpe

Répondre

0

La question réponse dans la documentation du module pickle: https://docs.python.org/2/library/pickle.html#data-stream-format

Il y a actuellement 3 protocoles différents qui peuvent être utilisés pour décapage.

La version de protocole 0 est le protocole ASCII d'origine et est à l'arrière compatible avec les versions antérieures de Python.

Le protocole version 1 est le vieux format binaire qui est également compatible avec les versions antérieures de Python.

La version 2 du protocole a été introduite dans Python 2.3. Il fournit décapage beaucoup plus efficace des classes de style nouveau.

Tout ce que vous affichez au début, c'est la version de protocole 0, qui est la valeur par défaut. À la fin - les versions de protocole binaires 1 ou 2.

Il suffit de spécifier le numéro de version du protocole:

>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt')) 
>>> file('f.txt', 'rt').read() 
"(dp0\nS'hello'\np1\nS'world'\np2\ns." 

>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt'), 2) 
>>> file('f.txt', 'rt').read() 
'\x80\x02}q\x00U\x05helloq\x01U\x05worldq\x02s.' 

>>> pickle.dump({'hello': 'world'}, file('f.txt', 'wt'), 1) 
>>> file('f.txt', 'rt').read() 
'}q\x00U\x05helloq\x01U\x05worldq\x02s.' 

PS: Pourquoi ne pas simplement utiliser un format lisible, par exemple JSON?

+0

Votre code ne fonctionne pas pour moi. – Jose

0

Si vous voulez des dictionnaires lisibles, rendez-vous avec json construit en python et la sortie ressemble à un dictionnaire.

+0

Je suis désolé, votre code ne fonctionne pas dans mon ordinateur. Cela me donne une erreur. Mon problème est que j'ai un gros fichier avec un dictionnaire imbriqué avec beaucoup de couches que quelqu'un me passe (donc je ne peux pas enregistrer les données dans un format différent) et le fichier est au format (dp0 S'Test 'p1 S'Test1 'p2 sS'Test2' p3 S'Test2 'p4 sS'Starspy' p5 S'SHSN4N 'p6 C'est la raison pour laquelle je veux: 1) apprendre comment je peux enregistrer un fichier avec ce type de format et 2) principalement pour pouvoir ouvrir le fichier que j'ai. – Jose

0

Le problème que j'ai eu était un problème de version. J'utilisais la version 3 et cela fonctionne avec la version 2. Dans le cas où je peux créer un fichier avec le format que j'ai dans le fichier que je veux lire, et je peux maintenant le lire. Merci beaucoup!!!