Come avvolgo una stringa in un file in Python?


Risposte:


124

Per Python 2.x, usa il modulo StringIO . Per esempio:

>>> from cStringIO import StringIO
>>> f = StringIO('foo')
>>> f.read()
'foo'

Uso cStringIO (che è più veloce), ma nota che non accetta stringhe Unicode che non possono essere codificate come semplici stringhe ASCII . (Puoi passare a StringIO cambiando "da cStringIO" a "da StringIO".)

Per Python 3.x, usa il iomodulo.

f = io.StringIO('foo')

1
C'è una ragione ora per usare cStringIO: cStringIO non supporta le stringhe Unicode.
Armin Ronacher

6
Penso che un'idea migliore sia quella di fare 'import cStringIO as StringIO'. In questo modo, se per qualsiasi motivo hai bisogno di passare all'implementazione pura di Python, devi solo cambiare una riga ..
John Fouhy,

Funziona anche per Python2.7: io.StringIO(u'foo')lo
userei

29

In 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 risposta accettata mostra già tale utilizzo. La mia risposta è complementare: dimostra with-statement e write, print, seek, read metodi.
jfs

7

Funziona per Python2.7 e Python3.x:

io.StringIO(u'foo')

5

Se si prevede che l'oggetto simile a un file contenga byte, la stringa deve essere prima codificata come byte, quindi è possibile utilizzare invece un oggetto BytesIO . In 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')))

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.