Como faço para criar um objeto semelhante a um arquivo (mesmo tipo de pato que Arquivo) com o conteúdo de uma string?
Como faço para criar um objeto semelhante a um arquivo (mesmo tipo de pato que Arquivo) com o conteúdo de uma string?
Respostas:
Para Python 2.x, use o módulo StringIO . Por exemplo:
>>> from cStringIO import StringIO
>>> f = StringIO('foo')
>>> f.read()
'foo'
Eu uso cStringIO (que é mais rápido), mas observe que ele não aceita strings Unicode que não podem ser codificadas como strings ASCII simples . (Você pode mudar para StringIO mudando "de cStringIO" para "de StringIO".)
Para Python 3.x, use o io
módulo.
f = io.StringIO('foo')
io.StringIO(u'foo')
Eu usaria isso
Se se espera que seu objeto semelhante a um arquivo contenha bytes, a string deve primeiro ser codificada como bytes e, em seguida, um objeto BytesIO pode ser usado em seu lugar. Em Python 3:
from io import BytesIO
string_repr_of_file = 'header\n byline\n body\n body\n end'
function_that_expects_bytes(BytesIO(bytes(string_repr_of_file,encoding='utf-8')))
Duas boas respostas. Eu adicionaria um pequeno truque - se você precisar de um objeto de arquivo real (alguns métodos esperam um, não apenas uma interface), aqui está uma maneira de criar um adaptador: