关于python:取消存储在网络驱动器上的大型对象

Unpickling large objects stored on network drives

我有大型(~75MB)腌制对象,这些对象在映射的网络驱动器上可用(例如:X:/folder1/large_pickled_item.pk)
这些对象包含numpy数组+ python列表,并使用cPickle,协议2进行pickle

当我尝试unpickle数据时,我收到以下错误消息:

使用泡菜:
KeyError :(随机字符)

使用cPickle:
IOError:[Errno 22]参数无效

如果腌制的物体尺寸较小,我不会得到错误,
或者如果我将(较大的)对象复制到本地驱动器并运行相同的脚本。

知道问题出在哪里?是python + pickle问题还是Windows共享问题?

笔记:

  • 我在Windows XP Professional(SP3)上使用Python 2.7.2
  • 我无法控制对象格式,我不创建它们,我只能读取它们
  • 示例堆栈跟踪:

    在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:'?'

  • 将文件以67076095字节的块读入字符串缓冲区。
  • 使用字符串缓冲区调用pickle.loads而不是使用文件对象调用pickle.load

  • 这是由于Windows错误,因此以大于64MB的块读取和写入网络文件不起作用。

    我建议尝试在https://stackoverflow.com/a/4228291/367273中提供的变通方法的镜像

    如果这没有帮助,也许您可以为文件对象创建一个包装器,它会自动将每个大的read()拆分成多个较小的读取,并将该包装器呈现给pickle模块?