Pythonを使ったファイルの読み書きは、プログラムがデータを永続化するために欠かせない技術です。初心者の方にとっても取り組みやすく、業務で扱うデータの保存や分析結果の出力など、多くのシーンで役立ちます。本記事では、Pythonでファイルを読み書きするための基本操作から、応用的な使用方法までを詳しく解説します。
ファイル操作の基本
Pythonでは、ファイルの読み書きには主にopen()
関数が使われます。この関数でファイルを開き、操作が完了したらファイルを閉じる必要があります。具体的な基本構文は以下の通りです。
file = open("ファイル名", "モード")
# ファイルに対する操作を行う
file.close()
ファイル操作における「モード」は非常に重要です。代表的なモードとして次のようなものがあります。
r
: 読み込み専用(ファイルが存在しない場合はエラー)w
: 書き込み専用(ファイルが存在しない場合は新規作成、存在する場合は内容が上書き)a
: 追記用(ファイルが存在しない場合は新規作成、存在する場合は末尾に追記)
ファイルの読み込み
まずはファイルからデータを読み取る方法を見ていきましょう。Pythonでは、テキストファイルやCSVファイルからの読み込みが多く用いられます。
テキストファイルの読み込み
「sample.txt」というファイルを例にして、その内容を一行ずつ読み込む方法を示します。今回はエラーハンドリングも含めて、正確にデータを取得するコードを記述します。
try:
with open("sample.txt", "r") as file:
for line in file:
print(line.strip()) # 行末の改行を削除して表示
except FileNotFoundError:
print("ファイルが見つかりません")
ここで注目すべきは、with
構文を使用してファイルを開いている点です。この構文を使うと、ファイルを自動的に閉じることができるため、close()
メソッドを呼び出す必要がありません。
一括読み込み
ファイル全体を一括で読み込む方法もあります。大量のデータを扱う場合はメモリに負荷がかかるため、小さなファイル向きですが、シンプルで便利です。
with open("sample.txt", "r") as file:
data = file.read()
print(data)
ファイルへの書き込み
次に、Pythonを使ってファイルにデータを書き込む方法を紹介します。
新規作成・上書きモード
書き込み専用モード(w
)でファイルを開き、内容を書き込むと、既存のファイルがあれば上書きされ、なければ新規作成されます。
with open("output.txt", "w") as file:
file.write("これはPythonで書き込んだテキストです。\n")
file.write("2行目のテキストも追加されます。")
このコードでは、write()
メソッドを使用して文字列をファイルに書き込んでいます。改行を追加したい場合は、\n
を含めると、行ごとに書き込むことができます。
追記モード
既存のファイルに新たな情報を追加する場合には、追記モード(a
)を使用します。このモードでは、ファイルの末尾にデータが追加され、既存の内容が削除されません。
with open("output.txt", "a") as file:
file.write("\n新しい行が追記されました。")
この例では、output.txt
に新しい行を追加しています。追記が必要な場合やログのように日々のデータを蓄積したい場合には、便利なモードです。
応用編:CSVファイルの操作
データのやり取りや保存の場面で多用されるCSVファイルもPythonで簡単に操作できます。Pythonの標準ライブラリであるcsv
モジュールを使うことで、表形式のデータを容易に読み書きできます。
CSVファイルの読み込み
まずは、CSVファイルからデータを読み込む方法です。以下のコードでは、CSVファイルを行ごとに読み取って出力します。
import csv
with open("data.csv", "r") as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
このコードでは、CSVファイルを一行ずつリストとして読み込み、出力しています。CSVファイルがカンマ区切りでない場合は、delimiter
引数で区切り文字を指定できます。
CSVファイルへの書き込み
CSVファイルにデータを書き込む場合も、csv
モジュールを使用します。新規ファイルを作成して、2次元リストからCSV形式でデータを書き込みましょう。
import csv
data = [
["名前", "年齢", "住所"],
["田中", 30, "東京"],
["鈴木", 25, "大阪"],
]
with open("output.csv", "w", newline="") as csvfile:
writer = csv.writer(csvfile)
writer.writerows(data)
writerows()
メソッドを使用することで、リストのリストとして持っているデータを一度に書き込めます。ファイルに改行を追加しないためには、newline=""
オプションを設定するのがポイントです。
ファイル操作のエラーハンドリング
ファイル操作を行う際には、いくつかの例外処理が必要です。例えば、ファイルが見つからない場合や読み込み・書き込みに失敗するケースなどがあります。これを考慮したエラーハンドリングの基本構造を以下に示します。
try:
with open("unknown_file.txt", "r") as file:
data = file.read()
except FileNotFoundError:
print("ファイルが見つかりません")
except IOError:
print("ファイルの読み書き中にエラーが発生しました")
ここでは、ファイルが存在しない場合にFileNotFoundError
が発生し、その例外をキャッチしてエラーメッセージを出力します。また、入出力エラーをキャッチするためにIOError
も使用しています。エラーハンドリングを行うことで、ファイル操作中の予期せぬエラーに備えることができます。
JSONファイルの操作
近年のAPIデータ交換で広く使われているJSONファイルも、Pythonで容易に操作できます。Pythonのjson
モジュールを使ってJSONファイルを読み書きする方法を見ていきましょう。
JSONファイルの読み込み
次の例では、json.load()
メソッドを使用してJSONファイルを辞書型として読み込む方法を示します。
import json
with open("data.json", "r") as jsonfile:
data = json.load(jsonfile)
print(data)
json.load()
を使用すると、JSON形式のデータが自動的にPythonの辞書やリストとして読み込まれます。
JSONファイルへの書き込み
辞書型やリスト型のデータをJSONファイルとして保存するには、json.dump()
を使用します。
data = {
"name": "田中",
"age": 30,
"city": "東京"
}
with open("output.json", "w") as jsonfile:
json.dump(data, jsonfile, ensure_ascii=False, indent=4)
ここではindent
引数でインデントを設定し、見やすい形式で出力しています。ensure_ascii=False
により、日本語などのマルチバイト文字も正しく保存されるようにしています。
まとめ
本記事では、Pythonでのファイル操作について、基礎から応用までを詳しく解説しました。ファイルの読み書きはプログラムとデータを結びつける重要な技術です。テキストファイルやCSV、JSONなど、データ形式に応じて適切な方法を活用できるよう、ぜひ実践を通じて身に付けてください。