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