Wie erstelle ich ein dateiähnliches Objekt (der gleiche Ententyp wie Datei) mit dem Inhalt einer Zeichenfolge?
Wie erstelle ich ein dateiähnliches Objekt (der gleiche Ententyp wie Datei) mit dem Inhalt einer Zeichenfolge?
Antworten:
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 io
Modul.
f = io.StringIO('foo')
io.StringIO(u'foo')
Ich würde dies verwenden
In Python 3.0:
import io
with io.StringIO() as f:
f.write('abcdef')
print('gh', file=f)
f.seek(0)
print(f.read())
with
-Statement- und Schreib-, Druck-, Such- und Lesemethoden.
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')))
Zwei gute Antworten. Ich möchte einen kleinen Trick hinzufügen: Wenn Sie ein echtes Dateiobjekt benötigen (einige Methoden erwarten eines, nicht nur eine Schnittstelle), können Sie hier einen Adapter erstellen: