取消存储在networking驱动器上的大型对象

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

当我试图取消数据,我得到以下错误信息:

使用pickle:KeyError :(随机字符)

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

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

任何想法的问题在哪里? 这是一个python+泡菜问题或Windows股票的问题?

笔记:

  1. 我在Windows XP Professional(SP3)上使用Python 2.7.2
  2. 我没有控制对象格式,我不创build它们,我只能阅读它们
  3. 示例堆栈跟踪:

    在loadObject的文件“test.py”,第38行,obj = pickle.load(input)在加载返回Unpickler(file).load()的第1378行的文件“C:\ software \ python \ lib \ pickle.py”在加载dispatchkey KeyError:'〜'的文件“C:\ software \ python \ lib \ pickle.py”,第858行。

  1. 以67076095个字节为单位将文件读入string缓冲区。
  2. 用string缓冲区调用pickle.loads,而不是用文件对象调用pickle.load

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

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

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