Python"IOError:[Errno 22]无效的参数"使用cPickle将大型阵列写入网络驱动器时 [英] Python "IOError: [Errno 22] Invalid argument" when using cPickle to write large array to network drive

查看:163
本文介绍了Python"IOError:[Errno 22]无效的参数"使用cPickle将大型阵列写入网络驱动器时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在塞巴斯蒂安·J·F·塞巴斯蒂安(J. F. Sebastian)的建议下,我可以更简单地得到相同的错误:

At the suggestion of J. F. Sebastian, I can get the same error much more simply:

Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.

IPython 0.10 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

  Welcome to pylab, a matplotlib-based Python environment.
  For more information, type 'help(pylab)'.

In [1]: open(r'c:\test.bin', 'wb').write('a'*67076095)

In [2]: open(r'c:\test.bin', 'wb').write('a'*67076096)

In [3]: open(r'z:\test.bin', 'wb').write('a'*67076095)

In [4]: open(r'z:\test.bin', 'wb').write('a'*67076096)
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)

C:\Documents and Settings\User\<ipython console> in <module>()

IOError: [Errno 22] Invalid argument

In [5]:

请注意,C:是本地驱动器,Z:是网络驱动器.

Note that C: is a local drive, and Z: is a network drive.

原始问题:

如果我使用cPickle将大于〜67 MB的文件写入我们的网络驱动器(ReadyNAS Pro Pioneer版),则Windows XP上的Python 2.6.4崩溃.我希望能够腌制大文件.这是一个已知问题吗?有解决方法吗?

Python 2.6.4 on Windows XP crashes if I use cPickle to write a file bigger than ~67 MB to our network drive (ReadyNAS Pro Pioneer edition). I'd like to be able to pickle large files. Is this a known problem? Is there a workaround?

以下脚本会导致崩溃:

import cPickle, numpy

a = numpy.zeros(8385007)
print "Writing %i bytes..."%(a.nbytes)
cPickle.dump(a, open('test_a.pkl', 'wb'), protocol=2)
print "Successfully written."

b = numpy.zeros(8385008)
print "Writing %i bytes..."%(b.nbytes)
cPickle.dump(b, open('test_b.pkl', 'wb'), protocol=2) ##Crashes on a network drive
print "Successfully written." ##Doesn't crash on a non-network drive

以下是在ipython提示符下产生崩溃的步骤:

Here's the steps I take to produce a crash at the ipython prompt:

Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.

IPython 0.10 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

  Welcome to pylab, a matplotlib-based Python environment.
  For more information, type 'help(pylab)'.

In [1]: pwd
Out[1]: 'C:\\Documents and Settings\\User'

In [2]: run test
Writing 67080056 bytes...
Successfully written.
Writing 67080064 bytes...
Successfully written.

In [3]: cd Z:
Z:\

In [4]: pwd
Out[4]: 'Z:\\'

In [5]: run 'C:\\Documents and Settings\\User\\test'
Writing 67080056 bytes...
Successfully written.
Writing 67080064 bytes...
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)

C:\Documents and Settings\User\test.py in <module>()
      8 b = numpy.zeros(8385008)
      9 print "Writing %i bytes..."%(b.nbytes)
---> 10 cPickle.dump(b, open('test_b.pkl', 'wb'), protocol=2)
     11 print "Successfully written."
     12

IOError: [Errno 22] Invalid argument
WARNING: Failure executing file: <C:\\Documents and Settings\\User\\test.py>

In [6]:

C:是计算机上的本地硬盘驱动器. Z:是我们的网络附加存储.

C: is the local hard drive on the machine. Z: is our network-attached storage.

推荐答案

我认为该问题与以下方面有关: http://support.microsoft.com/default.aspx?scid = kb; zh-CN; 899149

I believe the problem is related to: http://support.microsoft.com/default.aspx?scid=kb;en-us;899149

...所以,只需尝试: 打开(r'z:\ test.bin','w + b').write('a'* 67080064)

...so, just try: open(r'z:\test.bin','w+b').write('a'*67080064)

*请注意参数:"w + b"

*Note the argument: 'w+b'

这篇关于Python"IOError:[Errno 22]无效的参数"使用cPickle将大型阵列写入网络驱动器时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆