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.