有没有办法在不加载Windows的Python的情况下查看cPickle或Pickle文件内容?

Tim*_*imY 26 python pickle

我使用cPickle来保存每次运行程序的数据集.由于我有时需要在不运行代码的情况下查看数据的轮廓,因此我想通过双击文件来快速查看内容.我试图避免每次都加载一个终端并将python指向一个文件,只是为了运行一些print脚本.

我找了Notepad ++插件但找不到任何东西.

有一些简单的方法来做到这一点?有没有人有什么建议?

注意:我运行Windows 7.

jth*_*jth 42

对于Python 3.2 +/2.7 +,您可以__repr__从命令行查看(的)泡菜:

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

将它集成到Windows shell中应该很容易.


小智 11

您还可以在终端上创建别名,例如:

alias pvw="python -mpickle "
Run Code Online (Sandbox Code Playgroud)

就我而言:

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
Run Code Online (Sandbox Code Playgroud)


mgi*_*son 10

真的怀疑有没有办法做到这一点,因为pickle你可以收拾几乎任何东西.在取消打样时,您需要能够加载在对象被腌制时加载的模块等.换句话说,一般来说,为了能够unpickle做某事,python需要能够重现程序的"环境"(或者至少足够近似) - 加载模块,全局命名空间中的类等.一般来说,如果没有用户的帮助,这是不可能的.考虑:

import pickle
class Foo(object): pass

a = Foo()
with open('data.pickle','wb') as f:
    pickle.dump(a,f)
Run Code Online (Sandbox Code Playgroud)

现在,如果您尝试在单独的脚本中恢复它,python无法知道Foo它的外观,因此无法恢复该对象(除非您Foo在该脚本中定义合适的对象).这不是一个没有人为干预就可以完成的过程.

当然,一个可以说是有用的特殊情况,你只需要从标准库中挑选内置对象和东西......但我不认为你可以写一个普通的unpickler扩展.

  • 没有关于泡菜的想法,但是也没有阻止协议将“环境”的所有必要信息存储在其输出中的情况。在这种情况下,这是微不足道的:我们存储了一个没有额外参数的新型类。因此,这样做当然是可能的-这可能只是意味着存储大量额外信息。 (2认同)