TOP Pythonのストリームの使い方

Pythonのストリームの使い方

Python プログラミング
作成日時:2019年11月3日(日) 12時27分
更新日時:2019年11月3日(日) 15時55分

用語解説

I/O

入出力(input/output)のこと。

ストリーム(stream)

英単語としての意味は「何かの細い流れ」。
プログラミングでは「データが流れる通り道」だと思っておけば良い。
※Python以外の言語でも使われる単語です。

テキストストリームやバイナリーストリームは、それぞれ「(テキスト)データが流れる通り道」、「(バイナリー)データが流れる通り道」のこと。

ストリームについては後で詳しく説明します

テキストデータとバイナリーデータの違い

テキストデータもバイナリーデータも0と1の並びという点は同じですが、テキストデータは文字コード表に載っている文字コードの並びであるのに対して、
バイナリーデータは文字コードなどお構いなしに0と1が並んでいるデータです。

バイナリーデータの例としては画像データや動画データなどが挙げられます。
これらのデータの一部の0と1のパターンがたまたま文字コードと対応していることがあるかもしれませんが、基本的には文字コードと対応しません。

ストリーム

Pythonにおいてストリームを作る一番簡単な方法はファイルをopenすることだ。
f = open("text_file.txt", "r")
上のコードで変数fにtext_file.txtというテキストファイルと繋がったストリームが入る。
open()の第2引数で"r"が指定されているので、このストリームは読み込み専用だ。

読み取り専用のストリーム

読み込み専用のストリームにはread()、tell()、seek()などのインターフェース(関数)が用意されている。
read()はストリームからのデータの読み取り、tell()はストリームのデータの読み取り位置を取得、
seek()はストリームのデータの読み取り位置を変更する関数だ。

例えば
1234567890abcdefg
という内容のtext_file.txtという名前のファイルがあるとすると、下のようなコードと実行結果になる。
コード
f = open("text_file.txt", "r")

print("tell1 ->", f.tell())
first4 = f.read(4)
print("first4 ->", first4)
print("tell2 ->", f.tell())
f.seek(10)
last = f.read()
print("last ->", last)

f.close()
実行結果
tell1 -> 0
first4 -> 1234
tell2 -> 4
last -> abcdefg

書き込み専用のストリーム

書き込み専用のストリームを作るにはopen()の第2引数を"w"に変えればいい。
f = open("text_file.txt", "w")
書き込み専用のストリームにはwrite()、tell()、seek()などのインターフェース(関数)が用意されている。
読み込み専用にもあったtell()、seek()は今度は書き込む位置を取得・変更する。
write()はストリームにデータを書き込む関数だ。

次のコードを実行すると
f = open("text_file.txt", "w")

f.write("hello1234567890")

f.close()
下のようにtext_file.txtにhello1234567890が書き出される。

text_file.txt
hello1234567890

また、次のコードは下のようなtext_file.txtを生成する。
write()関数で1234567890を書き込んだ後に、seek()関数で書き込み位置を変更し、
さらにhelloを書き込んでいる。
f = open("text_file.txt", "w")

f.write("1234567890")
f.seek(3)
f.write("hello")

f.close()

text_file.txt
123hello90

最新記事


残り少ない今年にやっておきたいこと
勉強心得(自分用)
今後の勉強方針と勉強すること