ファイルは、PCにデータを保存する上で欠かせないもので、様々な種類があります。
そんな各種ファイルについて、Pythonを使用して処理することができます。
本記事では、Python基礎となるファイル処理について、詳しくご説明します。
ファイル処理
Pythonでファイル処理をする際に使用するのが、open()関数です。
open()はファイルオブジェクトを返し、このオブジェクトを介してファイルの読み書き処理を行います。
open()関数の引数は、(file name, mode)となっており、modeは下表の通りです。
mode | 内容 | ポインタ | 備考 |
---|---|---|---|
“r” | 読み込みモードで開く | 先頭 | デフォルト |
“r+” | 読み込み/書き込みモードで開く | 先頭 | |
“w” | 書き込みモードで開く | 先頭 | 開いたときにファイルをリセット |
“w+” | 読み込み/書き込みモードで開く | 先頭 | 開いたときにファイルをリセット |
“a” | 追記モードで開く | 末尾 | |
“a+” | 読み込み/追記モードで開く | 末尾 | |
“x” | 排他的(新規)書き込みモードで開く | 先頭 | 既に同名ファイルが存在すればエラーになる |
“b” | バイナリモード | ||
“t” | テキストモード | デフォルト |
ファイルの書き込み
open()関数を使用して、ファイルの書き込みを行います。
“w”モードを使用し、write()メソッドで書き込んだ例を以下にご紹介します。
#input
#ファイル"fruits.txt"を新規作成し、書き込みモードで開く
f = open("fruits.txt", mode = "w")
#ファイルに"apple"と書き込む
f.write("apple")
#ファイルを閉じる
f.close()
“w”モードは、開いた時点でファイルをリセットしてしまいます。
ファイルに内容追加する際には、”a”モードを使用しますので、注意しましょう。
ファイルの読み込み
open()関数の”r”モードを使用し、ファイルの読み込みを行います。
read()メソッドを使用して、上で作成したファイルを読み込んでみます。
#input
#ファイル"fruits.txt"を読み込みモードで開く
f = open("fruits.txt", mode = "r")
#ファイルの中身を表示する
print(f.read())
#ファイルを閉じる
f.close()
#output
apple
上でファイルに書き込んだ「apple」が正常に読み込まれました。
ファイルの追記
上で述べた”a”モードを使用して、ファイルへの追記を行います。
“a”モードでファイル末尾に追記し、”r”モードで読み込んだ例を以下にご紹介します。
#input
#ファイル"fruits.txt"を追記モードで開く
f = open("fruits.txt", mode = "a")
#ファイルの末尾に"orange"と追記する
f.write("\norange")
#ファイルを閉じる
f.close()
#ファイル"fruits.txt"を読み込みモードで開く
f = open("fruits.txt", mode = "r")
#ファイルの中身を表示する
print(f.read())
#ファイルを閉じる
f.close()
#output
apple
orange
ファイルに追記した「orange」が正常に読み込まれました。
改行「\n」を記述しない場合には、appleorangeと文字がつながります。
ファイルの読み込みと追記
読み込みと書き込みを同時に行うには、+オプションを指定します。
“a+”モードを使用して、「ファイル読み込み→追記→再度読み込み」の順で実行します。
上表の通り、追記モードではファイルポインタが末尾になっています。
この場合、読み込みする前にポインタを先頭に移動する必要があります。
f.seek()メソッドを使用してポインタを先頭に移動させて、読み込んでみます。
#input
#ファイル"fruits.txt"を読み込み/追記モードで開く
f = open("fruits.txt", mode = "a+")
#ポインタをファイル先頭に移動する
f.seek(0)
#ファイルの中身を表示する
print(f.read())
#output
apple
orange
“a+”モードで読み込みできましたので、続けて以下の通り追記します。
#input
#ファイルの末尾に"banana"と追記する
f.write("\nbanana")
#ポインタをファイル先頭に移動する
f.seek(0)
#ファイルの中身を表示する
print(f.read())
#ファイルを閉じる
f.close()
#output
apple
orange
banana
追記から再読み込みまで、”a+”モードで一貫して実行できました。
with文でファイル処理を簡潔化
今までご紹介したファイル処理では、ファイルを閉じる際にclose()関数を使用してきました。
しかし、毎回面倒ですし、閉じるのを忘れてしまう可能性もあります。
そのため、ファイル処理を簡潔化する手段として、with文の使用をおすすめします。
with文を使用した例を以下にご紹介します。
#input
#ファイル"fruits.txt"を新規作成し、読み込み/書き込みモードで開く
with open("fruits.txt", mode = "w+") as f:
#ファイルに"apple"と書き込む
f.write("apple")
#ポインタをファイル先頭に移動する
f.seek(0)
#ファイルの中身を表示する
print(f.read())
#output
apple
ファイルが自動的に閉じられ、ファイル処理が簡潔になりました。
エンコーディング
Pythonでファイルを開く場合、指定しない限り、定められたエンコーディングで開かれます。
たとえば、WindowsであればシフトJISで、MacであればUTF-8でエンコードされていると見做されます。
そのため環境によっては、日本語などの非アスキー文字が文字化けしたり、例外が発生したりします。
これを防ぐためには、ファイルを開く際にエンコーディングを指定する必要があります。
以下にエンコーディングをUTF-8に指定した例を載せます。
#input
#ファイル"fruits.txt"を新規作成し、読み込み/書き込みモードで開く
with open("fruits.txt", mode = "w+", encoding = "utf-8") as f:
#ファイルに"apple = 林檎"と書き込む
f.write("apple = 林檎")
#ポインタをファイル先頭に移動する
f.seek(0)
#ファイルの中身を表示する
print(f.read())
#output
apple = 林檎
open()関数の引数「encoding = “utf-8″」で、エンコーディングをUTF-8に指定して開きました。
このように開くファイルのエンコーディングに合わせて指定することで、デフォルトと異なる形式のファイルも開くことができます。
ファイルオブジェクト
上でご説明したもの以外の、基本的なファイルオブジェクトをご紹介します。
readline()
ファイルから一行読み込みます。
引数として、読み込むバイト数を整数で指定することもできます。
以下に例を載せます。
#input
#ファイル"fruits.txt"を新規作成し、読み込み/書き込みモードで開く
with open("fruits.txt", mode = "w+", encoding = "utf-8") as f:
#ファイルに"apple\norange\nbanana"と書き込む
f.write("apple\norange\nbanana")
#ポインタをファイル先頭に移動する
f.seek(0)
#ファイルを一行読み込む
print("一行読み込み:",f.readline())
#ファイルを3バイト読み込む
print("3バイト読み込み:",f.readline(3))
#output
一行読み込み: apple
3バイト読み込み: ora
print(“一行読み込み:”,f.readline())で一行目を読み込み、print(“3バイト読み込み:”,f.readline(3))で2行目の3バイトを読み込みました。
readlines()
ファイルをすべて読み込み、行ごとにリストとして出力します。
以下に例を載せます。
#input
#ファイル"fruits.txt"を新規作成し、読み込み/書き込みモードで開く
with open("fruits.txt", mode = "w+", encoding = "utf-8") as f:
#ファイルに"apple\norange\nbanana"と書き込む
f.write("apple\norange\nbanana")
#ポインタをファイル先頭に移動する
f.seek(0)
#ファイルをすべて読み込み、行ごとにリストとして出力する
print(f.readlines())
#output
['apple\n', 'orange\n', 'banana']
writelines()
文字列から成るシーケンス(リストやタプル等)の要素を結合して書き込みます。
以下に例をご紹介します。
#input
#リストを作成する
list = ["apple, ","orange, ","banana"]
#ファイル"fruits.txt"を新規作成し、読み込み/書き込みモードで開く
with open("fruits.txt", mode = "w+", encoding = "utf-8") as f:
#ファイルにリストを書き込む
f.writelines(list)
#ポインタをファイル先頭に移動する
f.seek(0)
#ファイルの中身を表示する
print(f.read())
#output
apple, orange, banana
まとめ
この記事では、Python基礎となるファイル処理について、ご説明しました。
本記事を参考に、ファイル操作を試してみて下さい。
参考
Python学習用おすすめ教材
Pythonの基本を学びたい方向け
統計学基礎を学びたい方向け
Pythonの統計解析を学びたい方向け
おすすめプログラミングスクール
Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!