Wie kann ich eine Zeichenfolge in eine Datei in Python einschließen?


Antworten:


117

Verwenden Sie für Python 2.x das StringIO- Modul. Beispielsweise:

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

Ich verwende cStringIO (was schneller ist), aber beachte, dass es keine Unicode-Zeichenfolgen akzeptiert, die nicht als einfache ASCII-Zeichenfolgen codiert werden können . (Sie können zu StringIO wechseln, indem Sie "von cStringIO" in "von StringIO" ändern.)

Verwenden Sie für Python 3.x das ioModul.

f = io.StringIO('foo')

1
Es gibt jetzt einen Grund, cStringIO zu verwenden: cStringIO unterstützt keine Unicode-Zeichenfolgen.
Armin Ronacher

6
Ich denke, eine bessere Idee ist es, 'cStringIO als StringIO zu importieren'. Auf diese Weise müssen Sie nur eine Zeile ändern, wenn Sie aus irgendeinem Grund zur reinen Python-Implementierung wechseln müssen.
John Fouhy

Dies funktioniert auch für Python2.7: io.StringIO(u'foo')Ich würde dies verwenden
guettli

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 Die akzeptierte Antwort zeigt eine solche Verwendung bereits. Meine Antwort ist komplementär: Sie demonstriert with-Statement- und Schreib-, Druck-, Such- und Lesemethoden.
JFS

6

Dies funktioniert für Python2.7 und Python3.x:

io.StringIO(u'foo')

5

Wenn erwartet wird, dass Ihr dateiähnliches Objekt Bytes enthält, sollte die Zeichenfolge zuerst als Bytes codiert werden, und dann kann stattdessen ein BytesIO- Objekt verwendet werden. 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')))

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.