IOError: [Errno 22] Argumento inválido ao ler / gravar bytestring grande
Estou entendendo
IOError: [Errno 22] Invalid argument
quando tento escrever um bytestring grande para o disco comf.write()
, Ondef
foi aberto com o modowb
.
Eu vi muitas pessoas on-line recebendo este erro ao usar uma unidade de rede do Windows, mas estou no OSX (10.7 quando eu originalmente fiz a pergunta, mas 10.8 agora, com um sistema de arquivos local HFS + padrão). Estou usando o Python 3.2.2 (acontece em um binário python.org e em uma instalação homebrew). Eu não vejo esse problema com o sistema Python 2.7.2.
Eu também tentei o modow+b
baseado emesta solução alternativa de bugs do Windows, mas é claro que isso não ajudou.
Os dados são provenientes de uma grande matriz numpy (quase 4 GB de floats). Ele funciona bem se eu passar o loop manualmente e escrevê-lo em partes. Mas porque eu não posso escrever tudo de uma só vez,np.save
enp.savez
falhar - já que eles apenas usamf.write(ary.tostring())
. Eu recebo um erro semelhante quando tento salvá-lo em um arquivo HDF5 existente comh5py
.
Note que eu recebo o mesmo problema ao ler um arquivo aberto comfile(filename, 'rb')
: f.read()
dá issoIOError
, enquantof.read(chunk_size)
por razoávelchunk_size
trabalho.
Alguma ideia?