やみとものプログラミング日記 やみとものプログラミング日記
TOP Pythonのストリームの使い方
Pythonのストリームの使い方

Pythonのストリームの使い方

Python プログラミング
作成日時: 2019年11月3日
更新日時: 2019年11月3日

用語解説

I/O

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

ストリーム(stream)

英単語としての意味は「何かの細い流れ」。
プログラミングでは「データが流れる通り道」だと思っておけば良い。
※Python以外の言語でも使われる単語です。
テキストストリームやバイナリーストリームは、それぞれ「(テキスト)データが流れる通り道」、「(バイナリー)データが流れる通り道」のこと。
ストリームについては後で詳しく説明します

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

テキストデータもバイナリーデータも0と1の並びという点は同じですが、テキストデータは文字コード表に載っている文字コードの並びであるのに対して、
バイナリーデータは文字コードなどお構いなしに0と1が並んでいるデータです。
バイナリーデータの例としては画像データや動画データなどが挙げられます。 これらのデータの一部の0と1のパターンがたまたま文字コードと対応していることがあるかもしれませんが、基本的には文字コードと対応しません。

ストリーム

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

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

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

例えば

1234567890abcdefg

という内容のtext_file.txtという名前のファイルがあるとすると、下のようなコードと実行結果になる。
コード
#python
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()
#python_end
実行結果

tell1 -> 0
first4 -> 1234
tell2 -> 4
last -> abcdefg


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

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

次のコードを実行すると
#python
f = open("text_file.txt", "w")
f.write("hello1234567890")
f.close()
#python_end
下のようにtext_file.txtにhello1234567890が書き出される。

text_file.txt

hello1234567890


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

text_file.txt

123hello90