実践・上級問題チェック

問題 27 /40

次のコードを実行した結果として、正しいものはどれか。

import io

stream = io.StringIO('abc')
stream.write('d')

print(stream.getvalue())

選択 1

abd

選択 2

abcd

選択 3

dbc

選択 4

dabc

解説

選択肢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)