我有大型(~75MB)可在映射网络驱动器上使用的pickle对象(例如:X:/folder1/large_pickled_item.pk) 这些对象包含numpy数组+ python列表,并使用cPickle,protocol 2
进行pickle当我尝试取消数据时,我收到以下错误消息:
使用泡菜: KeyError :(随机字符)
使用cPickle: IOError:[Errno 22]参数无效
如果腌制物体的尺寸较小,我不会得到错误, 或者如果我将(较大的)对象复制到本地驱动器并运行相同的脚本。
知道问题出在哪里?是python + pickle问题还是Windows共享问题?
注意:
示例堆栈跟踪:
在getObject中的文件“test.py”,第38行 obj = pickle.load(输入) 加载文件“C:\ software \ python \ lib \ pickle.py”,第1378行 返回Unpickler(文件).load() 加载文件“C:\ software \ python \ lib \ pickle.py”,第858行 dispatchkey KeyError:'〜'
答案 0 :(得分:1)
这是由于Windows bug,因此以大于64MB的块读取和写入网络文件不起作用。
我建议尝试https://stackoverflow.com/a/4228291/367273
中提供的变通方法的镜像如果这没有帮助,也许您可以为文件对象创建一个包装器,它会自动将每个大read()
分成多个较小的读取,并将该包装器呈现给pickle模块?