¿Cómo creo un objeto similar a un archivo (el mismo tipo de pato que File) con el contenido de una cadena?
¿Cómo creo un objeto similar a un archivo (el mismo tipo de pato que File) con el contenido de una cadena?
Respuestas:
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 esto
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')))
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: