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

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

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

есть идеи?

11
задан Dougal 30 August 2012 в 00:09
поделиться