IOError: [Errno 22] Invalid argument
当我尝试写一个大的字节串到磁盘f.write()
,其中f
与模式wb
打开参数无效。
我在网上看到很多人在使用Windows网络驱动器时出现这个错误,但是我在OSX上(当我最初问这个问题的时候是10.7,而现在是一个标准的HFS +本地文件系统的时候是10.8)。我正在使用Python 3.2.2(发生在python.org二进制文件和自制软件安装上)。我没有看到系统Python 2.7.2的这个问题。
我也试过模式w+b
根据this Windows bug workaround,但当然这并没有帮助。
数据来自一个大的numpy数组(几乎是4GB的浮点数)。它工作正常,如果我手动循环的字符串,并把它写出来块。但是因为我无法一次写完全部,所以np.save
和np.savez
失败 - 因为它们只是使用f.write(ary.tostring())
。当我尝试将其保存到与h5py
一个现有的HDF5文件时,我收到类似的错误。
注意阅读与file(filename, 'rb')
打开一个文件时,我得到了同样的问题:f.read()
给出了这样的IOError
,而f.read(chunk_size)
合理chunk_size
作品。
有什么想法?
奇怪。 'EINVAL' = 22,但['man 2 write'](https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man2/write.2.html)中没有任何内容适用。你可以运行['dtruss'](http://developer.apple.com/documentation/Darwin/Reference/Manpages/man1/dtruss.1m.html)来检查它是否真的是'写'系统调用失败? – ephemient 2012-07-29 05:19:51
“如果我手动在字符串上循环并将其写入块中,它工作正常。”那为什么不呢?您认为您应该能够一次编写多大的数据?你可以用'size_t'来计算吗? – msw 2012-07-29 05:39:41
@msw就像我说的,这打破了'np.save',更重要的是我'h5py'。很显然,如果我手动完成这项工作,我可以并且确实将它写入块中,并且如果我先创建数据集并一次写入50行,那么它可以在'h5py'中运行。但这不应该是必要的,正如证明这些图书馆没有看到需要这样做的事实。而我的数组“只有”5亿个条目(log_2 <29),可以通过32位的int来寻址,更不用说size_t了。 – Dougal 2012-07-29 06:38:53