Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 取消勾选存储在网络驱动器上的大型对象_Python_Windows_Pickle - Fatal编程技术网

Python 取消勾选存储在网络驱动器上的大型对象

Python 取消勾选存储在网络驱动器上的大型对象,python,windows,pickle,Python,Windows,Pickle,我有大的(~75MB)pickled对象,这些对象在映射的网络驱动器上可用(例如:X:/folder1/large_pickled_item.pk) 这些对象包含numpy数组+python列表,并使用cPickle协议2进行pickle处理 当我尝试取消勾选数据时,会收到以下错误消息: 使用pickle: KeyError:(随机字符) 使用cPickle: IOError:[Errno 22]参数无效 如果pickle对象的大小较小,则不会出现错误, 或者,如果我将(较大的)对象复制到本地驱

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

当我尝试取消勾选数据时,会收到以下错误消息:

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

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

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

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

注:

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

    getObject中第38行的文件“test.py” obj=pickle.load(输入) 加载文件“C:\software\python\lib\pickle.py”,第1378行 返回Unpickler(file.load()) 加载文件“C:\software\python\lib\pickle.py”,第858行 调度键 KeyError:“~”

  • 解决方案
  • 将67076095字节的文件块读入字符串缓冲区
  • 使用字符串缓冲区调用pickle.load,而不是使用文件对象调用pickle.load
  • 这是由于一个错误,即读写块大于64MB的网络文件不起作用

    我建议尝试中介绍的解决方法的镜像

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

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

    我建议尝试中介绍的解决方法的镜像


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

    这可能与您所指的问题非常类似,但这并不能解决我的问题:解决方案是使用w+b选项打开文件进行写入,类似的读取技巧不起作用这可能与您所指的问题相同,但它不能解决我的问题:解决方案是使用w+b选项打开文件进行写入,类似的阅读技巧也不管用谢谢你的回答,我已经尝试了镜像解决方法:用r+b打开文件不管用。我可以尝试另一个技巧,但我不确定泡菜是否只能在一个小盒子的一部分上使用object@Dhara:我的意思是,当请求读取时,比如64MB,它将获得两个32MB的块,合并它们,并将结果返回pickle模块。这将避开64MB的Windows限制。谢谢你的回答,我已经尝试了镜像解决方法:用r+b打开文件不起作用。我可以尝试另一个技巧,但我不确定泡菜是否只能在一个小盒子的一部分上使用object@Dhara:我的意思是,当请求读取时,比如64MB,它将获得两个32MB的块,合并它们,并将结果返回pickle模块。这将避开64MB的窗口限制。