¿Cómo envuelvo una cadena en un archivo en Python?


Respuestas:


121

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 iomódulo.

f = io.StringIO('foo')

1
Ahora hay una razón para usar cStringIO: cStringIO no admite cadenas Unicode.
Armin Ronacher

6
Creo que una mejor idea es hacer 'importar cStringIO como StringIO'. De esa manera, si necesita cambiar a la implementación de Python puro por cualquier motivo, solo necesita cambiar una línea ..
John Fouhy

Esto también funciona para Python2.7: io.StringIO(u'foo')usaría esto
guettli

29

En Python 3.0:

import io

with io.StringIO() as f:
    f.write('abcdef')
    print('gh', file=f)
    f.seek(0)
    print(f.read())

1
@ABB, la respuesta aceptada ya muestra dicho uso. Mi respuesta es complementaria: demuestra los withmétodos de enunciado y escritura, impresión, búsqueda, lectura.
jfs

6

Esto funciona para Python2.7 y Python3.x:

io.StringIO(u'foo')

5

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')))

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.