/*THK Analytics用解析タグ*/

【Python】ファイル入出力

2022年8月12日

 

一般的にC言語などのプログラミング言語には組み込み関数と呼ばれる通常のプログラミングに必要な関数群があります。
もちろんPythonにも組み込み関数が用意されています。
print()も組み込み関数の一つです。

本項では今まで触れてこなかったファイル入出力に関してご紹介します。
ファイル入出力も組み込み関数の一つです。

ファイル入出力はほとんどのプログラミング言語に用意されている基本的な関数です。
使い方もほぼ同じですので今後、他の言語を学ぶ際にも応用が可能です。

ファイルアクセスの基本的な流れ

ファイル入出力は以下の流れで行います。
①ファイルオープン
ファイル名を指定してファイルを開きます。
②ファイルのリード/ライト
ファイルへの書き込み、もしくはファイルからの読み取りを行います。
③ファイルクローズ
すべての処理が終了したらファイルをクローズします。

Pythonでのファイル書き込み

サンプルをご覧下さい

file = open("test_01.txt", mode="w")
file.write("file access sample 01")
file.close()

1行目、file = open(“test_01.txt", mode="w")がファイルオープンになり、ファイルオブジェクトであるfileが生成されました。
名称はfileである必要は無く、任意の名前を利用出来ます。
open関数の第一引数がファイル名です。パスを指定しない場合はカレントのファイル名を指定したことになります。
第二引数はリード/ライトを指定します。"w"は書き込みを示し、ファイルが存在しない場合は新規作成、存在する場合は上書きになります。
2行目、file.write(“file access sample 01")が、実際にファイルにデータを書き込んでいる部分です。
3行目、file.close()でファイルクローズを行います。

実行するとtest_01.txtファイルが生成されます。中身をテキストエディタなどで開くとfile access sample 01となっているはずです。

連続して書き込む

連続して書き込むにはファイルオープンをしたままwriteを行います。
サンプルをご覧下さい。特に解説は不要ですね。

file = open("test_01.txt", mode="w")
file.write("file access sample 01")
file.write("\n")
file.write("file access sample 02")
file.write("\n")
file.write("file access sample 03")
file.close()

pythonでのファイルの追記

先ほどは、ファイルをオープンしたまま連続に書き込みましたが、閉じてしまったファイルへの書き込みはどうするのでしょう。
file = open(“test_01.txt", mode="w")を行うと、上書きされファイルの内容が消えてしまいます。

file = open("test_03.txt", mode="w")
file.write("1回目書き込み\n")
file.close()
file = open("test_03.txt", mode="a")
file.write("2回目書き込み\n")
file.close()

1行目から3行目は通常のファイル書き込みを行って、ファイルを閉じています。
4行目のファイルオープンでは"a"モードで開いています。
“a"は追記モード(append)を示しています。
生成されたファイルtest_03.txtを確認いただくとデータが追記されているのがわかります。

pythonでのファイル読み込み

1行読み込み

1行の読み込みにはreadline関数を利用します。
サンプルをご覧下さい。

file = open("test_04.txt", mode="w")
file.write("read test\n")
file.close()
file = open("test_04.txt", mode="r")
read_data = file.readline()
print(read_data)
file.close()

1行目から3行目でリードするサンプルのテキストを作成しています。
4行目で今度は読み込みモード"r"で開いています。
5行目で実際に読み取りを行っています。readline()はファイルから1行読み取りを指定しています。
確認の為6行目で画面に内容を表示し最後にクローズして終了しています。

連続した取り込み

readline関数を何度も呼び出すことで複数行のデータを取得します。
ファイルの終端に達するとreadlineは空の文字列を返します。

#読み取り用のサンプルファイルを作成
file = open("test_05.txt", mode="w")
file.write("1行目\n")
file.write("2行目\n")
file.write("3行目\n")
file.write("4行目\n")
file.close()
#サンプルファイルの読み取り
file = open("test_05.txt", mode="r")
while True:
read_data = file.readline()
if read_data == "": #ファイルの終端かを確認
break
print(read_data)
file.close()

7行目まででサンプル用のファイルを作成しています。
10行目以降が読み取り部分です。
ファイルの行数が分からないのでwhile True:で無限ループを作っています。
ファイルの読み取りは12行目のreadline()です。今まで学んで来たことと同じです。
次のif read_data == “"でファイル終端チェックを行っています。
ファイル終端では空の文字列(すなわち"")を返すのでif文はTrueとなりbreakしwhileループから抜けます。

サンプルプログラムを実行すると
1行目
2行目
3行目
4行目
と表示されます。

readlinesを利用した一括読みこみ

readlinesを利用するとループを使わず全行を一気に読み込むことが出来ます。

#読み取り用のサンプルファイルを作成
file = open("test_06.txt", mode="w")
file.write("1行目\n")
file.write("2行目\n")
file.write("3行目\n")
file.write("4行目\n")
file.close()
#サンプルファイルの読み取り
#データが配列になる様子を示すサンプルです
file = open("test_06.txt", mode="r")
data_list = file.readlines()
print (data_list[0])
print (data_list[1])
print (data_list[2])
print (data_list[3])
file.close()
#再度読み込みます
#実際にはこのように利用します
file = open("test_06.txt", mode="r")
data_list = file.readlines()
for data in data_list:
print(data)
file.close()

7行目まででサンプル用のファイルを作成しています。
12行目でreadlinesを用いて一気に読み込んでいます。
結果は行毎の配列となりdata_list変数に代入されています。
代入の様子が分かるように13行から16行にかけて配列としてアクセスしています。
21行目以降は実際に利用する際のサンプルプログラムです。
for文でアクセスしています。
for文の部分をちょっとだけ解説。
配列data_listを先頭から順にアクセスします。つまりdata_list[0],data_list[1],・・・・。
アクセスした結果がdataに格納されます。

readを利用した一括読みこみ

readを利用しても全行を一気に読み込むことが出来ます。
readでは配列ではなく一つのデータとしての取り込みです。

#読み取り用のサンプルファイルを作成
file = open("test_07.txt", mode="w")
file.write("1行目\n")
file.write("2行目\n")
file.write("3行目\n")
file.write("4行目\n")
file.close()
file = open("test_07.txt", mode="r")
data = file.read()
print(data)
file.close()

read,readline,readlines使い分け

ファイルが大きい場合readlinesでは時間がかかりすぎるのでreadlineを使って必要なところをリードします。
readは引数にサイズを指定するとそのサイズまで読み出すことが出来ます(サンプルは用意しませんでしたがご自分でお試し下さい)

今回はここまで。

お疲れ様でした。

python教室「総合目次」に戻る

Python教室

Posted by taka