Python'da bir dosyadaki bir dizeyi nasıl sarmalarım?


Yanıtlar:


124

Python 2.x için, StringIO modülünü kullanın . Örneğin:

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

CStringIO (daha hızlı) kullanıyorum, ancak düz ASCII dizeleri olarak kodlanamayan Unicode dizelerini kabul etmediğini unutmayın . ("CStringIO" dan "StringIO" ya değiştirerek StringIO'ya geçebilirsiniz.)

Python 3.x için iomodülü kullanın .

f = io.StringIO('foo')

1
Şimdi cStringIO'yu kullanmak için bir neden var: cStringIO, unicode dizelerini desteklemiyor.
— Armin Ronacher

6
Bence daha iyi bir fikir 'cStringIO'yu StringIO olarak içe aktar' yapmaktır. Bu şekilde, herhangi bir nedenle saf python uygulamasına geçmeniz gerekirse, yalnızca bir satırı değiştirmeniz gerekir ..
— John Fouhy

Bu Python2.7 için de işe yarıyor: io.StringIO(u'foo')Bunu kullanacağım
— guettli

29

Python 3.0'da:

import io

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

1
@ABB kabul edilen cevap bu tür kullanımı zaten gösteriyor. Cevabım tamamlayıcı: withifade ve yazma, yazdırma, arama, okuma yöntemlerini gösteriyor.
— jfs

7

Bu, Python2.7 ve Python3.x için çalışır:

io.StringIO(u'foo')

5

Dosya benzeri nesnenizin bayt içermesi bekleniyorsa, dize önce bayt olarak kodlanmalı ve ardından bunun yerine bir BytesIO nesnesi kullanılabilir. Python 3'te:

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')))

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.