我得到了
IOError: [Errno 22] Invalid argument
当我使用f.write()
将一个大的字节串写入磁盘时,出现了错误。这里的f
是以wb
模式打开的。
我在网上看到很多人在使用Windows网络驱动器时出现了这个错误,但我用的是OSX(10.7当我最初提问时,但现在是10.8,使用标准的HFS+本地文件系统)。我使用的是Python 3.2.2(发生在python.org二进制和homebrew安装中)。但是,在系统Python 2.7.2中,我没有看到这个问题。
我还尝试了以w+b
模式进行操作,基于这个Windows bug workaround,但是当然这并没有起到任何帮助。
数据来自一个大型的numpy数组(近4GB的浮点数)。如果我手动循环字符串并按块写出,它可以正常工作。但由于我不能一次性写入所有数据,所以np.save
和np.savez
失败了——因为它们只是使用f.write(ary.tostring())
。当我尝试将其保存到已存在的HDF5文件中时,并使用h5py
,也会出现类似的错误。
请注意,如果使用file(filename, 'rb')
打开文件进行读取,我也会遇到同样的问题:f.read()
会出现IOError
,而对于合理的chunk_size
,f.read(chunk_size)
可以正常工作。
有什么想法吗?
EINVAL
=22,但man 2 write
中似乎没有适用的内容。你能否在dtruss
下运行以检查是否真的是write
系统调用失败了? - ephemientsize_t
还要大吗? - mswnp.save
,对我来说更重要的是h5py
。显然,如果我手动操作,我可以并且确实会将其分成块,并且如果我先创建数据集,然后每次写入50行,它在h5py
中可以正常工作。但是这不应该是必要的,因为这两个库都没有看到这种需要。而我的数组仅有“500 million entries”(log_2 < 29),这可以由32位int
,更不用说size_t
来寻址。 - Danica