実践・上級問題チェック
問題 27 /40
次のコードを実行した結果として、正しいものはどれか。
import io
stream = io.StringIO('abc')
stream.write('d')
print(stream.getvalue())
解説
選択肢3が正解です。
ioモジュールのStringIOは、文字列をファイルのように扱います。
ファイルのように扱うことで、ファイルしか受け付けない関数に対して、ファイルを作ることなくオブジェクトを渡すことができます。
StringIOは、問題文のようにwrite()関数で書き込む場合、オフセット(場所)を指定しないと先頭から順に入れ替わります。
そのため、問題文はabcのaがdに入れ替わり、「dbc」の結果になります。
選択肢2の「abcd」のようにdを末尾に追加する場合は、次のように「seek(0, io.SEEK_END)」でフォーカスを末尾に移動した後、write()関数で書き込みます。
-------------------------------
import io
stream = io.StringIO('abc')
stream.seek(0, io.SEEK_END)
stream.write('d')
print(stream.getvalue())
-------------------------------
(公式書籍 p.228-229)