Pythonで文字列をファイルにラップするにはどうすればよいですか?


回答:


121

Python 2.xの場合、StringIOモジュールを使用します。例えば:

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

私はcStringIO(より高速)を使用していますが、プレーンASCII文字列としてエンコードできないUnicode文字列を受け入れないことに注意してください。(「fromcStringIO」を「fromStringIO」に変更することでStringIOに切り替えることができます。)

Python 3.xの場合は、ioモジュールを使用します。

f = io.StringIO('foo')

1
cStringIOを使用する理由があります。cStringIOはUnicode文字列をサポートしていません。
アーミン・ロンチャー

6
'import cStringIO asStringIO'を実行する方がよいと思います。そのようにあなたが何らかの理由で純粋なPython実装に切り替える必要があれば、あなただけの1行を変更する必要があります...
ジョンFouhy

これはPython2.7でも機能します。io.StringIO(u'foo')これを使用します
guettli 2018

29

Python 3.0の場合:

import io

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

1
@ABBが受け入れた回答は、すでにそのような使用法を示しています。私の答えは補足的です:それは- withステートメントと書き込み、印刷、シーク、読み取りメソッドを示しています。
jfs 2016年

6

これはPython2.7およびPython3.xで機能します。

io.StringIO(u'foo')

5

ファイルのようなオブジェクトにバイトが含まれることが予想される場合は、最初に文字列をバイトとしてエンコードしてから、代わりにBytesIOオブジェクトを使用できます。Python 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')))

2

2つの良い答え。ちょっとしたトリックを追加します—実際のファイルオブジェクトが必要な場合(一部のメソッドはインターフェイスだけでなくオブジェクトを期待します)、アダプターを作成する方法は次のとおりです。


"ページが見つかりません" - rfk.id.au/software/projects/filelike/api/filelike.htmは
JFS

2
今すぐバックアップされているようです(7年後;)
Ethan Furman 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.