Como faço para criar um objeto semelhante a um arquivo (mesmo tipo de pato que Arquivo) com o conteúdo de uma string?
89
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 issoEm Python 3.0:
import io with io.StringIO() as f: f.write('abcdef') print('gh', file=f) f.seek(0) print(f.read())
fonte
with
métodos de declaração e escrita, impressão, busca e leitura.Isso funciona para Python2.7 e Python3.x:
io.StringIO(u'foo')
fonte
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')))
fonte
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:
fonte