プログラミングをしていると、データを保存したり、他のプログラムからデータを読み込む必要が出てきます。Pythonでは、ファイルの読み書きを簡単に行うための機能が豊富に用意されています。この章では、テキストファイルやCSVファイルの読み書きを中心に、Pythonによるファイル操作の基本を解説します。
7.1 ファイルを扱うための基本的な流れ
Pythonでファイルを操作する場合、基本的な流れは次の3つのステップです:
- ファイルを開く(
open()
関数を使用) - ファイルを操作する(読み込みや書き込み)
- ファイルを閉じる(
close()
メソッドを使用)
これらの操作を理解し、安全にファイルを扱えるようになることが重要です。
7.2 ファイルを開く(open関数)
Pythonでファイルを開く際には、open()
関数を使います。open()
関数は、2つの主な引数を取ります:
- ファイル名(パス):開きたいファイルの名前またはパス
- モード:ファイルをどのように開くかを指定します(読み込み、書き込み、追加など)
7.2.1 ファイルを開くモード
ファイルを開くモードには、次のようなものがあります:
r
:読み込み専用モード(ファイルが存在しないとエラー)w
:書き込み専用モード(ファイルが存在しない場合は新規作成、存在する場合は上書き)a
:追加書き込みモード(ファイルが存在しない場合は新規作成、ファイルの末尾に追記)x
:新規作成専用モード(ファイルが存在するとエラー)b
:バイナリモード(rb
,wb
などと組み合わせて使用)
7.2.2 ファイルを開く例
テキストファイルを読み込むために、open()
関数を使ってファイルを開きます。次にファイルの内容を読み込み、最後にファイルを閉じる必要があります。
# ファイルを読み込み専用モードで開く
file = open('example.txt', 'r')
# ファイルの内容を読み込んで表示する
content = file.read()
print(content)
# ファイルを閉じる
file.close()
上記のコードでは、example.txt
というファイルを読み込み専用で開き、内容を read()
メソッドで取得して表示しています。最後に、close()
メソッドでファイルを閉じます。
7.3 ファイルを閉じる(closeメソッド)
ファイルを操作し終わった後は、必ず**close()
** メソッドを呼んでファイルを閉じる必要があります。これを忘れると、ファイルが開きっぱなしになり、データの破損やリソースの無駄遣いにつながる可能性があります。
しかし、毎回 close()
を書くのを忘れることもあるため、Pythonではより安全な方法として、with
文を使ったファイル操作が推奨されています。
7.4 with文を使ったファイル操作
with
文を使うことで、ファイルを開いた後、自動的にファイルが閉じられるようになります。これにより、close()
を呼び忘れる心配がなくなり、コードもシンプルになります。
7.4.1 with文の使い方
with
文を使ってファイルを開く例を見てみましょう。
# with文を使ってファイルを読み込む
with open('example.txt', 'r') as file:
content = file.read()
print(content) # ファイルの内容を表示
# withブロックを抜けると自動的にファイルが閉じられる
このコードでは、with
ブロックが終了すると、file
は自動的に閉じられます。close()
を手動で呼ぶ必要がないため、ミスを防ぐことができます。
7.5 テキストファイルの読み込み
次に、ファイルの内容を実際に読み込む方法を見ていきましょう。Pythonでは、さまざまな方法でファイルの内容を読み込むことができます。
7.5.1 readメソッドを使った全体の読み込み
read()
メソッドを使うと、ファイル全体を一度に読み込むことができます。
with open('example.txt', 'r') as file:
content = file.read() # ファイル全体を一度に読み込む
print(content)
この方法は、ファイルのサイズが小さい場合に適していますが、大きなファイルの場合はメモリを大量に消費する可能性があるため注意が必要です。
7.5.2 readlineメソッドを使った行ごとの読み込み
readline()
メソッドを使うと、ファイルを1行ずつ読み込むことができます。
with open('example.txt', 'r') as file:
line = file.readline() # 1行目を読み込む
print(line)
複数行を順次読み込みたい場合、readline()
をループの中で使います。
with open('example.txt', 'r') as file:
for line in file:
print(line.strip()) # 各行を表示
このコードでは、ファイルのすべての行を1行ずつ読み込み、print()
で表示しています。
7.5.3 readlinesメソッドを使ったリスト形式の読み込み
readlines()
メソッドを使うと、ファイル全体をリストとして取得できます。各行がリストの要素として格納されます。
with open('example.txt', 'r') as file:
lines = file.readlines() # 各行がリストの要素として格納される
print(lines)
この方法は、ファイルの各行を個別に処理する際に便利です。
7.6 テキストファイルへの書き込み
次に、ファイルにデータを書き込む方法を見てみましょう。Pythonでは、w
(書き込みモード)やa
(追記モード)を使ってファイルに書き込みを行います。
7.6.1 writeメソッドを使った書き込み
write()
メソッドを使うと、ファイルにデータを書き込むことができます。まずは、書き込み専用モードでファイルを開きます。
with open('output.txt', 'w') as file:
file.write("Hello, Python!\n")
file.write("これはファイルへの書き込みの例です。\n")
この例では、output.txt
というファイルに2行のテキストを書き込んでいます。もしファイルが存在しない場合は、新規に作成されます。また、既存のファイルがある場合は、内容が上書きされます。
7.6.2 writelinesメソッドを使った複数行の書き込み
writelines()
メソッドを使うと、複数の行を一度にファイルに書き込むことができます。書き込むデータはリストで渡します。
lines = ["1行目\n", "2行目\n", "3行目\n"]
with open('output.txt', 'w') as file:
file.writelines(lines)
このコードでは、リスト lines
の各要素が output.txt
に順番に書き込まれます。
7.7 ファイルの追記
書き込みモードでは、既存のファイルが上書きされてしまいますが、内容を追加したい場合は、追記モード(a
)を使います。
with open('output.txt', 'a') as file:
file.write("新しい行を追加します。\n")
このコードでは、既存の output.txt
に新しい行が追加されます。
7.8 CSVファイルの操作
CSVファイルは、Comma-Separated Values(カンマ区切りの値)の略で、データを表形式で保存する際に広く使われるフォーマットです。Pythonでは、csv
モジュールを使って簡単にCSVファイルを読み書きすることができます。
7.8.1 CSVファイルの読み込み
まずは、csv.reader
を使ってCSVファイルを読み込む方法を見てみましょう。
import csv
with open('data.csv', 'r') as file:
reader = csv.reader(file)
for row in reader:
print(row)
このコードでは、data.csv
の内容が1行ずつ row
というリストとして読み込まれ、各行が表示されます。
7.8.2 CSVファイルへの書き込み
次に、csv.writer
を使ってCSVファイルに書き込む方法を見てみましょう。
import csv
with open('output.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerow(["名前", "年齢", "職業"]) # ヘッダー行を書き込む
writer.writerow(["Alice", 30, "エンジニア"]) # データ行を書き込む
writer.writerow(["Bob", 25, "デザイナー"])
このコードでは、output.csv
にヘッダー行とデータ行が書き込まれます。newline=''
を指定することで、行が正しく改行されるようにしています。
7.9 ファイル操作におけるエラーハンドリング
ファイル操作中にファイルが存在しない場合や、アクセス権限がない場合など、エラーが発生することがあります。こうしたエラーを例外処理で適切に処理することが大切です。
7.9.1 try-except文を使ったエラーハンドリング
try-except
文を使うことで、エラーが発生した場合でもプログラムを安全に処理できます。
try:
with open('non_existent_file.txt', 'r') as file:
content = file.read()
except FileNotFoundError:
print("ファイルが見つかりませんでした。")
この例では、ファイルが存在しない場合に FileNotFoundError
が発生し、そのエラーをキャッチしてメッセージを表示します。
まとめ
この章では、Pythonでのファイル操作の基礎を学びました。ファイルを読み書きする方法や、with
文を使った安全なファイル操作、さらにはCSVファイルの操作方法も紹介しました。ファイルの読み書きはプログラミングで非常に重要なスキルですので、ここで学んだ知識を活用して、さまざまなデータを扱ってみましょう。