¿Cómo creo un objeto similar a un archivo (el mismo tipo de pato que File) con el contenido de una cadena?
85
Para Python 2.x, use el módulo StringIO . Por ejemplo:
>>> from cStringIO import StringIO
>>> f = StringIO('foo')
>>> f.read()
'foo'
Utilizo cStringIO (que es más rápido), pero tenga en cuenta que no acepta cadenas Unicode que no se pueden codificar como cadenas ASCII simples . (Puede cambiar a StringIO cambiando "de cStringIO" a "de StringIO").
Para Python 3.x, use el io
módulo.
f = io.StringIO('foo')
io.StringIO(u'foo')
usaría estoEn Python 3.0:
import io with io.StringIO() as f: f.write('abcdef') print('gh', file=f) f.seek(0) print(f.read())
fuente
with
métodos de enunciado y escritura, impresión, búsqueda, lectura.Esto funciona para Python2.7 y Python3.x:
io.StringIO(u'foo')
fuente
Si se espera que su objeto similar a un archivo contenga bytes, la cadena debe codificarse primero como bytes y luego se puede usar un objeto BytesIO en su lugar. En 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')))
fuente
Dos buenas respuestas. Agregaría un pequeño truco: si necesita un objeto de archivo real (algunos métodos esperan uno, no solo una interfaz), aquí hay una forma de crear un adaptador:
fuente