2008-09-26 10 views

Odpowiedz

81

Dla Pythona 2.x użyj modułu StringIO. Na przykład:

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

używam cStringIO (co jest szybciej), ale należy pamiętać, że nie robi accept Unicode strings that cannot be encoded as plain ASCII strings. (Możesz przejść do StringIO, zmieniając "z cStringIO" na "ze StringIO".)

Dla Pythona 3.x użyj modułu io.

f = io.StringIO('foo') 
+1

Istnieje powód, aby teraz używać cStringIO: cStringIO nie obsługuje łańcuchów unicode. –

+3

Myślę, że lepszym pomysłem jest zrobienie "importu cStringIO jako StringIO". W ten sposób, jeśli z jakiejkolwiek przyczyny musisz przełączyć się na czystą implementację pythona, musisz zmienić tylko jedną linię. –

+0

Działa to również dla Python2.7: 'io.StringIO (u'foo ')' Używałbym tego – guettli

22

W Pythonie 3.0:

import io 

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

@ABB zaakceptowana odpowiedź pokazuje już takie użycie. Moja odpowiedź jest komplementarna: demonstruje "z" -powiadomieniem i pisze, drukuje, poszukuje, czyta metody. – jfs

2

Dwa dobre odpowiedzi. Chciałbym dodać małą sztuczkę - jeśli trzeba obiektu rzeczywistego pliku (niektóre metody oczekiwać, a nie tylko jeden interfejs), tutaj jest sposób, aby utworzyć adaptera:

+0

"Nie znaleziono strony" - http://www.rfk.id.au/software/projects/filelike/api/filelike.htm – jfs

+0

Co za wstyd. Nie można znaleźć oryginału ... –

+1

Wydaje się być z powrotem teraz (7 lat później;) –

1

ten działa dla Python2.7 i Python3.x:

io.StringIO(u'foo') 
Powiązane problemy