Pythonでファイルを読み込むには
Pythonでは簡単にプログラムからファイルを読み込み、利用が可能です。基本的な流れをマスターできれば、テキストファイルやCSVファイルの読み込みも簡単にできます。
ここでは、サンプルコードを用いてテキストファイルを読み込む方法を解説していきます。その後、CSVファイルを取り込んでデータを処理する方法も紹介します。
Pythonのファイル読み込み方法
Pythonではファイルの読み込みや書き込みなど、入力関数と出力関数を組み込み関数として定義しています。ファイルを読み込むには組み込み関数のopen()、read()、readlines()、close()などを使用します。最初にopen()関数の用法を学び、実際のサンプルコードを見ながらファイルの読み込みを行います。
【参考】:Python Docs: 入力と出力 【参考】:Python Docs: 組み込み関数
ファイルのオープンとクローズ
ファイルを読み込むには、オープンとクローズの操作が必要です。オープンせずにファイルを読み込むことはできません。オープンはopen()関数を用い、クローズはclose()関数です。
オープンからクローズの間は、一括読み込み用のread()関数、あるいは行単位読み込みのreadlines()関数などが使用できます。
open()関数の正式構文は、次の通りです。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
ここで、open()関数の引数を第1引数から順に説明します。最初に指定するfileは、ファイル名あるいはディレクトリパスを含むファイル名です。読み込むファイル名は必ず指定が必要です。
modeは ’r’ が読み込み、 ’w’ は書き込み時に指定します。 ’b’ がバイナリモード、 ’t’ がテキストモードです。テキストモードの読み込み ’r’ 、同義の ’rt’ がデフォルトの動作なのでその場合は省略可能です。
第2引数に記述する場合は ”mode=” を省略し、 ’r’ あるいは ’w’ のみを記述することもできます。
encodingでは、テキストのエンコーディングを指定することができます。デフォルトのエンコーディングはプラットフォームに依存するコードが用いられ、テキストエンコーディングを切り替える場合などに使用します。以降の引数のbuffering、errors、newlineは必要な場合のみ指定し、省略可能です。
上記引数の説明を見ると、大変そうだと感じた方もいるでしょう。内容を整理すると、テキストファイルを読み込む場合は、ファイル名のみを指定すれば良いことが分かります。テキストファイルを読み込む場合の用法は、次の通りとてもシンプルです。
open(file)
open()で開いたファイルは、最後にclose()で閉じる必要があります。open()関数とclose()関数をセットで使用します。
ファイルを一括で読み込み表示する
ファイルを一括で読み込むには、read()関数を使います。ここでは、テキストファイル「文字ファイル.txt」を読み込み表示する例について説明します。「文字ファイル.txt」には、以下のように果物の品名が入っています。テキストは、どのような内容でもかまいません。
リンゴ
バナナ
オレンジ
このファイルはテキストファイルなので、ファイルをオープンするopen()関数の引数はファイル名のみで大丈夫です。ファイルを読み込むにはread()関数を使います。read()関数の引数は ”size=” で指定します。 ”size=-1” または未指定の場合は、ファイルの最後まで1度に読み込みます。表示はprint()関数です。
実際のコードは、次のようになります。
f = open('文字ファイル.txt')
strings = f.read()
print(strings)
f.close()
ファイルをオープンし、読み込み、表示し、クローズするという流れです。関数は、open()、read()、print()、close()のようにシンプルに記述することができます。なお、close()をコールした後は、open()せずにread()を呼び出すことはできないので、close()は最後に行います。
応用ですが、close()のつけ忘れを防止するために、withキーワードを使用することもできます。f.read()が完了すると、自動的にファイルをクローズしてくれます。安全性を高めるために日常のプログラミングではwithキーワードを利用すると良いでしょう。
with open('文字ファイル.txt') as f:
strings = f.read()
print(strings)
ファイルを一括読み込みし行単位で表示する
先に学んだread()関数は、一括読み込みするための関数です。複数の行からなるテキストファイルは改行を含んでおり、行単位で取り込んでおくと後処理を追加する際に便利です。
Pythonでは行単位で一括読み込みするために、readlines()関数を提供しています。readlines()関数では読み込んだ文字列を行単位に分割し、リストに格納します。リストとは、配列のような構造を持つ変数です。1度に読み込む行数は引数で指定することもできます。
次のサンプルコードでは、readlines()関数で行単位にリストに格納しています。リストを表示するために、「for ~ in」の構文で表します。print()関数はテキストファイルの行数分だけ実行されます。
各リストの文字列には、行末に改行コードが含まれます。print()の呼び出し時に行末の改行コードを表示しないために、「end=’’」を指定すると良いでしょう。
f = open('文字ファイル.txt')
list = f.readlines()
for string in list: # リストのデータをstringに順に格納する
print(string, end='')
f.close()
ファイルを1行ずつ読み込み表示する
先のreadlines()関数では、ファイルの読み込み時に一括でデータを読み込みました。ここで紹介するreadline()関数は、1行ずつ読み込むための関数です。readline()関数では、3行のテキストファイルを読み込む場合、すべて読み込むには3回の呼び出しが必要です。
実際の使用例は次の通りで、ファイルの読み込み終了を「while」で確認しています。
f = open('文字ファイル.txt')
string = f.readline()
while string != '': # 読み込みが終了するまで、行単位で読み込み・表示の処理を繰り返す
print(string, end='')
string = f.readline()
f.close()
CSVファイルの読み込み方法
CSVファイルは、カンマ区切りのテキストファイルなので、Pythonで簡単に読み込めます。ここでは、CSVファイルとして「集計ファイル.csv」を用意します。この例で用いるCSVファイルは、品目と個数がカンマで区切られており、次の内容が保存されています。
リンゴ,5
バナナ,3
オレンジ,9
ここでは、CSVファイルを開いて読み込み、個数を集計していきます。ここでの読み込みは、行単位で読み込むreadline()関数を使います。その後、カンマ区切りの部分をsplit()関数で2つのデータに分割します。
1番目の変数itemは品目で、2番目の変数numberはカンマ区切りの個数で、整数としてtotalに格納し、合算します。最後にすべての行を読み込んだら合計値を表示します。
total = 0
f = open('集計ファイル.csv')
string = f.readline()
while string != '': # 読み込みが終了するまで、行単位で読み込み、以下の処理を繰り返す
# 読み込んだ行のデータを、2つに変数に分割する
item, number = string.split(',')
# 2つの変数を表示する
print(item, number, end='')
# 合計totalに個数を順次加算する
total = total + int(number)
# 次の行のデータを読み込む
string = f.readline()
f.close()
# 最後に合計を表示する
print('数の合計は',total)
実行結果は、次のように表示されます。集計結果も合致していることが分かります。
リンゴ 5
バナナ 3
オレンジ 9
数の合計は 17
ちょっとしたCSVファイルは、上記のように簡単にプログラムで利用できます。また、Pythonでは、csvモジュールをimportしてより高度にcsvファイルを扱うことができます。興味がある方は、以下のリンクを確認してください。
【参考】:Python Docs: csv --- CSV ファイルの読み書き
Pythonのファイル読み込みはすぐに活用できる
Pythonは、コード開発が簡単で既存のライブラリを活用できるメリットがあります。ファイルの読み込みも、シンプルで1度作成すれば応用が可能です。開発生産性を高めるためにも、用途に応じたファイル読み込みのコードを準備し、再利用することをおすすめします。
その他の関連記事
その他に関連する内容は、下記の記事でもご紹介しています。ぜひ参考にご覧ください。
Pythonのバージョン確認方法!コマンドラインとプログラムから確認するには?
Pythonの実行環境とは?おすすめのPython実行環境を解説
Pythonによるウェブサイトの作り方!主要フレームワークを解説
Pythonのsleep関数とは?概要や使い方、応用例を解説
Pythonのラムダ式(無名関数)とは?特徴や便利な使い方を解説
Pythonのインスタンスとクラスに挑戦!利用方法を詳しく解説
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから