Jak utworzyć obiekt podobny do pliku (ten sam typ kaczki co plik) z zawartością ciągu?
Jak utworzyć obiekt podobny do pliku (ten sam typ kaczki co plik) z zawartością ciągu?
Odpowiedzi:
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())
with
wypowiadanie i pisanie, drukowanie, wyszukiwanie, czytanie.
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')))
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: