3

当试图腌制 numpy 中定义的对象 Inf 时(我认为),转储正常,但加载失败:

>>> cPickle.dump(Inf, file("c:/temp/a.pcl",'wb'))
>>> cPickle.load(file("c:/temp/a.pcl",'rb'))
Traceback (most recent call last):
  File "<pyshell#257>", line 1, in <module>
    cPickle.load(file("c:/temp/a.pcl",'rb'))
ValueError: could not convert string to float
>>> type(Inf)
<type 'float'>

这是为什么?而且 - 有没有办法解决这个问题?我想腌制有 Inf 的东西——把它改成别的东西会破坏程序的优雅......

谢谢

4

2 回答 2

5

如果您指定大于零的 pickle 协议,它将起作用。协议通常指定为 -1,表示使用最新最好的协议:

>>> cPickle.dump(Inf, file("c:/temp/a.pcl",'wb'), -1)
>>> cPickle.load(file("c:/temp/a.pcl",'rb'))
1.#INF                   -- may be platform dependent what prints here.
于 2009-08-09T02:12:38.517 回答
-1

在 SourceForge 试试这个解决方案,它适用于任何 Python 对象:

y_serial.py 模块 :: 使用 SQLite 存储 Python 对象

“序列化 + 持久性 :: 在几行代码中,将 Python 对象压缩和注释为 SQLite;然后在没有任何 SQL 的情况下通过关键字按时间顺序检索它们。数据库存储无模式数据的最有用的“标准”模块。”

http://yserial.sourceforge.net

于 2009-09-13T05:23:41.563 回答