IOError:[Errno 22]读/写大字节串时的参数无效

时间:2012-07-26 05:31:23

标签: python macos python-3.x

我正在

IOError: [Errno 22] Invalid argument

当我尝试使用f.write()将大字节字符串写入磁盘时,其中f以模式wb打开。

我在网上看到很多人在使用Windows网络驱动器时遇到此错误,但我在OSX上(当我最初提问时为10.7但现在是10.8,使用标准的HFS +本地文件系统)。我正在使用Python 3.2.2(发生在python.org二进制文件和自制软件安装)。我没有看到系统Python 2.7.2的这个问题。

我还尝试了基于this Windows bug workaround的模式w+b,但当然没有帮助。

数据来自一个大的numpy数组(几乎4GB的浮点数)。如果我手动循环字符串并以块的形式写出它,它工作正常。但是因为我不能一次性写出来,np.savenp.savez失败 - 因为他们只使用f.write(ary.tostring())。当我尝试将其保存到具有h5py的现有HDF5文件时,我收到类似的错误。

请注意,在阅读使用file(filename, 'rb')打开的文件时,我遇到了同样的问题:f.read()IOError提供了此f.read(chunk_size)chunk_size表示合理的{{1}}有效。

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

这似乎是fread / fwrite的一般OSX错误,因此Python用户无法解决这个问题。请参阅numpy #3858this torch7 committhis SO question/answer,....

据说小牛队已经修好了,但我仍然看到了这个问题。

Python 2可能解决了这个问题,或者它的io模块可能总是缓冲大量读/写;我没有彻底调查过。

答案 1 :(得分:-2)

也许尝试不用b标志打开,我不认为所有OS /文件系统都支持。