こんにちは、データ分析屋のやじろべえ(@yajirobe_papa)です。
Python超入門第十二回です。前回はPythonにおけるクラスについて解説しました。
今回はテキストファイルの読み込みについて解説していきます。
これまではPythonの開発環境内のみで完結するような内容でしたが、今回と次回では外部データ(テキストファイル)を読み込んだり、書き込みをしたりといった操作を学んでいきます。
それでは早速やっていきましょう!
目次
ファイルを開く・閉じる
Pythonでファイルを開くには、open関数を使います。
open関数の使い方は以下のようにして使います。
open(‘開くファイル’)
コードで確認してみます。今回はname_data.txtというテキストファイルを用意します。
name_data.txtの中身は次のように名前が入力されています。
佐藤
鈴木
高橋
田中
伊藤
渡辺
山本
中村
小林
加藤
では早速このテキストファイルを開いてみますが、次の一行だけなので簡単ですね。
In [1]: file = open('name_data.txt')
最後に、ファイルを開いたら必ず最後にファイルを閉じることを忘れないようにしましょう。
開いたファイルを閉じないと、プログラムで色々と不具合が生じてしまう可能性があります。例えば、ファイルを閉じていない事によって変更した内容が保存していなかったりといったことが発生します。
ファイルの閉じ方は以下のようにclose()を最後に追加してあげればOKです。
In [2]: file.close()
ファイルを読み込む
次に、開いたファイルの中身を読み込んでみます。
Pythonでファイルを読み込む方法は大きく分けて次の3通りがあります。
- read関数で全体を読み込む
- readlines関数で全体を読み込んで1行ずつリストに格納
- readline関数で1行ずつ読み込む
それぞれのやり方にはメリット・デメリットがありますが、すごくザックリとした説明をすると、1, 2に付いてはデータの内容を全て読み込むので処理としては効率的なのですが、データのサイズが大きいものだとメモリを圧迫してしまう恐れがありますので注意が必要です。そのため、大きいデータを取り扱う時には3の方法を使うことをおすすめします。
それではそれぞれの方法について見ていきましょう。
read関数で全体を読み込む方法
下のコードの一行目でテキストファイルを開き、二行目でread関数を使って中身を読み込んでそれを変数”data”に渡しています。
ここで、open関数の引数の中でencoding=”utf-8″がありますが、こちらは文字エンコードといって、これは文字に割り当てられた数字に関する用語のことです。
コンピュータの内部では文字も数字の0と1でしか判断していません。そのため、ある文字に対して数字に変換しなければならないわけですが、この変換表のことを文字エンコードと言います。
文字エンコードにはいくつか種類があり、その中でも広く使われているのが”utf-8″ですので、特に理由がなければこちらを指定しておきましょう。
文字エンコードを指定しないでファイルを開こうとすると、エラーが発生することがありますので注意です。
文字エンコードは奥が深いため、ここではこれ以上の深入りはしませんが、気になる方は是非調べてみてください。
中身を表示させるためにprint関数を使ってdataを出力します。そしt、最後に忘れずにcloseを使ってfileを閉じましょう。
In [3]: file = open('name_data.txt', encoding="utf-8") data = file.read() print(data) file.close() Out [3]: 佐藤 鈴木 高橋 田中 伊藤 渡辺 山本 中村 小林 加藤
readlines関数で全体を読み込んで1行ずつリストに格納
read関数と書き方はほとんど一緒ですね。違うのは、readとなっているところをreadlinesにするだけです。
In [4]: file = open('name_data.txt', encoding="utf-8") data = file.readlines() print(data) file.close() Out [4]: ['佐藤\n', '鈴木\n', '高橋\n', '田中\n', '伊藤\n', '渡辺\n', '山本\n', '中村\n', '小林\n', '加藤\n']
結果を見てみると、read関数とは違ってリスト型で結果が返されていることがわかります。
また、名前の後に’\n’が付いていますが、これは改行コードと呼ばれるものです。改行コードとは名前の通り、改行を指示する特殊な文字コードのことです。
一行一行出力するには、得られたリストをfor文で出力すればOKです。
In [5]: file = open('name_data.txt', encoding="utf-8") data = file.readlines() for line in data: print(line) file.close() Out [5]: 佐藤 鈴木 高橋 田中 伊藤 渡辺 山本 中村 小林 加藤
上の例では一行一行出力されましたが、名前と名前の間に空白行が入っています。
これは末尾の改行コードが重複していることによるものなので、出力する際に改行コードを一つ消してあげます。
やり方はいくつかありますが、ここでは文字列型の操作で習ったrstrip関数を使って、一番右端にある改行コード’\n’を削除します。
rstrip関数を忘れてしまった人は、第五回講座を復習してみましょう。
それでは、コードで確認してみます。
In [6]: file = open('name_data.txt', encoding="utf-8") data = file.readlines() for line in data: line = line.rstrip('\n') print(line) file.close() Out [6]: 佐藤 鈴木 高橋 田中 伊藤 渡辺 山本 中村 小林 加藤
readline関数で1行ずつ読み込む
readline関数はファイルから一行だけ読み出します。コードで確認してみましょう。
In [7]: file = open('name_data.txt', encoding="utf-8") line = file.readline() print(line) Out [7]: 佐藤
readline関数を使って全ての行を出力する時には、while文と組み合わせて使うと便利です。
while文の条件はブール型のTrueにしておきます。これでTrueであり続ける限り処理をループさせることになりますが、while文の中で読み込む行が無かった場合はbreakしてwhile文を抜けるようにしています。
コードで確認してみましょう。
In [8]: file = open('name_data.txt', encoding="utf-8") while True: line = file.readline() line = line.rstrip('\n') if not line: break print(line) file.close() Out [8]: 佐藤 鈴木 高橋 田中 伊藤 渡辺 山本 中村 小林 加藤
with文を使う書き方
ここまで説明してきたやり方は「ファイルを開く→処理→ファイルを閉じる」という流れでしたが、正直書くのが少し面倒ですね。よくやりがちなのはファイルを閉じるのを忘れてしまうことだと思います。
これを解決してくれるのが、with文です。with文を使うと開始と終了の処理をセットで行ってくれます。with文を使ったファイル処理の使い方は以下のようになります。
with open(‘開くファイル’) as 変数:
実行する処理
早速コードで確認してみましょう。
with文 + read関数
In [9]: path = 'name_data.txt' with open(path, encoding="utf-8") as file: data = file.read() print(data) Out [9]: 佐藤 鈴木 高橋 田中 伊藤 渡辺 山本 中村 小林 加藤
with文 + readlines関数
In [10]: path = 'name_data.txt' with open(path, encoding="utf-8") as file: data = file.readlines() for line in data: line = line.rstrip('\n') print(line) Out [10]: 佐藤 鈴木 高橋 田中 伊藤 渡辺 山本 中村 小林 加藤
with文 + readline関数
In [11]: path = 'name_data.txt' with open(path, encoding="utf-8") as file: while True: line = file.readline() line = line.rstrip('\n') if not line: break print(line) Out [11]: 佐藤 鈴木 高橋 田中 伊藤 渡辺 山本 中村 小林 加藤
少し長くなってしまいましたので、今回はここまでにしましょう。
まとめ
今回はPythonでのテキストファイルの読み込みについて解説しました。
テキストファイルの読み込みが出来るようになると、外部で作られたテキストファイルを読み込んで編集や計算を行えるようになり、プログラミングの幅が広がりますよ!
次回はPythonにおけるファイルの書き込みについて記事にします。
それではお疲れ様でした。