web-dev-qa-db-fra.com

Existe-t-il un moyen d'afficher le contenu des fichiers cPickle ou Pickle sans charger Python sous Windows?

J'utilise cPickle pour enregistrer les ensembles de données de chaque exécution d'un programme. Étant donné que j'ai parfois besoin de voir le contour des données sans exécuter le code, je voudrais un moyen simple de visualiser rapidement le contenu en double-cliquant simplement sur le fichier. J'essaie d'éviter d'avoir à charger un terminal et à pointer python vers un fichier à chaque fois, juste pour exécuter un script print.

J'ai cherché des plugins Notepad ++ mais je n'ai rien trouvé.

Existe-t-il un moyen simple de procéder? Est-ce que quelqu'un a des suggestions?

Remarque: j'exécute Windows 7.

27
TimY

Pour Python 3.2 +/2.7 +, vous pouvez voir (__repr__'s des) cornichons de la ligne de commande:

$ python -c "import pickle; pickle.dump({'hello': 'world'}, open('obj.dat', 'wb'))"
$ python -mpickle obj.dat
{'hello': 'world'}

Il devrait être facile de l'intégrer dans le shell Windows.

40
jth

Je VRAIMENT doute qu'il existe un moyen de le faire car avec pickle, vous pouvez emballer à peu près n'importe quoi. Lors du décrochement, vous devez être en mesure de charger les modules etc. qui ont été chargés lorsque l'objet a été décapé. En d'autres termes, en général, pour pouvoir unpickle quelque chose, python doit être capable de reproduire "l'environnement" du programme (ou au moins une approximation suffisamment proche) ) - modules chargés, classes dans l'espace de noms global, etc ... En général, cela n'est pas possible sans l'aide de l'utilisateur.

import pickle
class Foo(object): pass

a = Foo()
with open('data.pickle','wb') as f:
    pickle.dump(a,f)

Maintenant, si vous essayez de restaurer cela dans un script séparé, python n'a aucun moyen de savoir à quoi ressemble un Foo et donc il ne peut pas restaurer l'objet (sauf si vous définissez un objet Foo approprié dans ce script). Ce n'est pas vraiment un processus qui peut être fait sans intervention humaine.

Bien sûr, un cas spécial sans doute utile où vous ne faites que décaper des objets intégrés et des choses de la bibliothèque standard pourrait être tenté ... mais je ne pense pas que vous puissiez écrire une extension générale de décollage.

10
mgilson

Vous pouvez également créer un alias sur votre terminal, par exemple:

alias pvw="python -mpickle "

dans mon cas :

pvw obj.dat                                   
         ID    A_ID   B_ID   PAST_ID
    0    20    1008   4771     425  
    1    20    2000   4771     425  
    2    20    2015   4771     425
0
Pyxtraker