Pythonのストリームの使い方
作成日時: | 2019年11月3日 |
更新日時: | 2019年11月3日 |
用語解説
I/O
入出力(input/output)のこと。ストリーム(stream)
英単語としての意味は「何かの細い流れ」。プログラミングでは「データが流れる通り道」だと思っておけば良い。
※Python以外の言語でも使われる単語です。
テキストデータとバイナリーデータの違い
テキストデータもバイナリーデータも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