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, я не думаю, что это поддерживается во всех ОС / файловых системах.