IOError: [Errno 22] Недопустимый аргумент при чтении / записи большой строки байтов

Я собираюсь

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, но это, конечно, не помогло.

Данные поступают из большого массива (почти 4 ГБ с плавающей запятой). Это работает нормально, если я вручную перебираю строку и записываю ее кусками. Но потому что я не могу написать все это за один проход, np.save а также np.savez потерпеть неудачу - так как они просто используют f.write(ary.tostring()), Я получаю похожую ошибку при попытке сохранить ее в существующий файл HDF5 с h5py,

Обратите внимание, что я получаю ту же проблему при чтении файла, открытого с file(filename, 'rb'): f.read() дает это IOError, в то время как f.read(chunk_size) для разумного chunk_size работает.

Какие-нибудь мысли?

2 ответа

Решение

Похоже, что это общая ошибка OSX в fread / fwrite и поэтому не может быть исправлена ​​пользователем Python. Смотрите numpy # 3858, этот torch7 коммит, этот ТАК вопрос / ответ, ....

Возможно, это было исправлено в Mavericks, но я все еще вижу проблему.

Python 2, возможно, работал вокруг этого, или его модуль io, возможно, всегда буферизировал большие чтения / записи; Я не исследовал полностью

Возможно, попробуйте не открывать с флагом b, я не думаю, что это поддерживается во всех ОС / файловых системах.

Другие вопросы по тегам