Jak utworzyć obiekt podobny do pliku (ten sam typ kaczki co plik) z zawartością ciągu?
85
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 io
modułu.
f = io.StringIO('foo')
io.StringIO(u'foo')
W Pythonie 3.0:
import io with io.StringIO() as f: f.write('abcdef') print('gh', file=f) f.seek(0) print(f.read())
źródło
with
wypowiadanie i pisanie, drukowanie, wyszukiwanie, czytanie.Działa to dla Python2.7 i Python3.x:
io.StringIO(u'foo')
źródło
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')))
źródło
Dwie dobre odpowiedzi. Dodałbym małą sztuczkę - jeśli potrzebujesz prawdziwego obiektu pliku (niektóre metody wymagają takiego, a nie tylko interfejsu), oto sposób na stworzenie adaptera:
źródło