相关疑难解决方法(0)

Python:不能腌制类型X,属性查找失败

我想腌制一个namedtuple:

from collections import namedtuple
import cPickle

class Foo:

    Bar = namedtuple('Bar', ['x', 'y'])

    def baz(self):
        s = set()
        s.add(Foo.Bar(x=2, y=3))
        print cPickle.dumps(s)

if __name__ == '__main__':
    f = Foo()
    f.baz()
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

Traceback (most recent call last):
  File "scratch.py", line 15, in <module>
    f.baz()
  File "scratch.py", line 11, in baz
    print cPickle.dumps(s)
cPickle.PicklingError: Can't pickle <class '__main__.Bar'>: attribute lookup __main__.Bar failed
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?问题Bar是成员Foo吗?(将定义Bar移到顶层可以解决问题,尽管我仍然很好奇为什么会发生这种情况.)

python pickle

42
推荐指数
3
解决办法
4万
查看次数

在python中编写和读取namedtuple到一个文件

我需要编写一个存储为namedtuple文件的数据结构,并namedtuple在python 中将其读回.

这里的解决方案建议使用Json.load/ loadspickle以字符串的形式将变量写为json键值对.但是,我的所有字段访问/解除引用都是形式struct.key(而不是struct["key"]访问json值的方式),并且在整个代码中纠正这一点是不可行的.

我想将它存储到一个文件中,因为结构很大并且需要花费很多时间来生成.

python file-io json pickle namedtuple

2
推荐指数
2
解决办法
4203
查看次数

标签 统计

pickle ×2

python ×2

file-io ×1

json ×1

namedtuple ×1