Jak zawinąć ciąg w pliku w Pythonie?


Odpowiedzi:


121

W przypadku języka Python 2.x użyj modułu StringIO . Na przykład:

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

Używam cStringIO (który jest szybszy), ale zauważ, że nie akceptuje on ciągów Unicode, których nie można zakodować jako zwykłych ciągów ASCII . (Możesz przełączyć się na StringIO, zmieniając „z cStringIO” na „z StringIO”).

W przypadku języka Python 3.x użyj iomodułu.

f = io.StringIO('foo')

1
Jest teraz powód, aby używać cStringIO: cStringIO nie obsługuje łańcuchów Unicode.
Armin Ronacher

6
Myślę, że lepszym pomysłem jest wykonanie „importu cStringIO jako StringIO”. W ten sposób, jeśli z jakiegoś powodu musisz przełączyć się na implementację czystego Pythona, wystarczy zmienić tylko jedną linię.
John Fouhy

Działa to również dla io.StringIO(u'foo')
Pythona 2.7: użyłbym

29

W Pythonie 3.0:

import io

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

1
@ABB zaakceptowana odpowiedź pokazuje już takie użycie. Moja odpowiedź jest komplementarna: demonstruje - withwypowiadanie i pisanie, drukowanie, wyszukiwanie, czytanie.
jfs


5

Jeśli obiekt plikopodobny ma zawierać bajty, ciąg powinien być najpierw zakodowany jako bajty, a następnie można użyć obiektu BytesIO . W Pythonie 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')))

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.