【发布时间】:2012-05-11 18:52:19
【问题描述】:
我有大型 (~75MB) 腌制对象可在映射的网络驱动器上使用(例如:X:/folder1/large_pickled_item.pk) 对象包含 numpy 数组+python 列表,并使用 cPickle 进行腌制,协议 2
当我尝试解开数据时,我收到以下错误消息:
使用泡菜: KeyError:(随机字符)
使用 cPickle: IOError: [Errno 22] 参数无效
如果腌制的物体尺寸较小,我不会出错, 或者如果我将(较大的)对象复制到本地驱动器并运行相同的脚本。
知道问题出在哪里吗?是python+pickle问题还是windows共享问题?
注意事项:
- 我在 Windows XP Professional (SP3) 上使用 Python 2.7.2
- 我无法控制对象格式,我不创建它们,我只能读取它们
-
示例堆栈跟踪:
文件“test.py”,第 38 行,在 getObject 中 obj = pickle.load(输入) 文件“C:\software\python\lib\pickle.py”,第 1378 行,加载中 返回 Unpickler(file).load() 文件“C:\software\python\lib\pickle.py”,第 858 行,加载中 调度键 KeyError: '~'
解决方案
- 将文件以 67076095 字节的块读取到字符串缓冲区中。
- 使用字符串缓冲区调用pickle.loads,而不是使用文件对象调用pickle.load
【问题讨论】:
-
这可能和stackoverflow.com/questions/4226941/…是同一个问题
-
您所指的问题确实类似,但并没有解决我的问题:解决方案是使用 w+b 选项打开文件进行写入,与读取类似的技巧没有工作