12

我越来越

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 存在这个问题。

我还尝试w+b了基于此 Windows 错误解决方法的模式,但这当然没有帮助。

数据来自一个大型 numpy 数组(几乎 4GB 的浮点数)。如果我手动循环字符串并将其分块写出,它工作正常。但是因为我不能一口气把它全部写完,所以np.save失败np.savez了——因为他们只是使用f.write(ary.tostring()). 当我尝试将其保存到现有的 HDF5 文件中时,出现类似的错误h5py

请注意,在读取使用以下命令打开的文件时,我遇到了同样的问题file(filename, 'rb')f.read()给出了这个IOError,而f.read(chunk_size)对于合理的chunk_size工作。

有什么想法吗?

4

2 回答 2

7

这似乎是带有 fread / fwrite 的一般 OSX 错误,因此 Python 用户无法真正修复。见numpy #3858这个 torch7 commit这个 SO question/answer,....

据说它已在 Mavericks 中得到修复,但我仍然看到这个问题。

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

于 2014-07-12T19:19:06.213 回答
-2

也许尝试不使用 b 标志打开,我认为并非所有操作系统/文件系统都支持它。

于 2012-08-29T22:55:20.100 回答