本記事では、Pythonでファイル操作に欠かせないopen関数の基本から応用までを解説します。この記事を読むことで、テキストファイルやバイナリファイルの読み書きが簡単にできるようになります。
open関数とは
open関数はPythonに標準で組み込まれている関数で、ファイルを開いて読み書きするための入り口となります。この関数一つでテキストファイルの読み込み、新規作成、追記、さらにはバイナリファイルの操作まで幅広く対応できます。
主なモードと説明
open関数では「モード」を指定することで、ファイルをどのように扱うかを決められます。以下に主なモードをまとめました。
モード | 説明 |
r | テキストファイルを読み込み専用で開く |
w | テキストファイルを書き込み専用で開く(上書き) |
a | テキストファイルを追記専用で開く(末尾に追記) |
rb | バイナリファイルを読み込み専用で開く |
wb | バイナリファイルを書き込み専用で開く(上書き) |
x | 新規ファイル作成モード(ファイルが存在する場合はエラー) |
r+ | 読み書き両用モード |
使い方
それでは実際にopen関数を使ってファイル操作を行う方法を、用途別に見ていきましょう。
ファイルを読み込む(rモード)
最も基本的な使い方は、既存のファイルを読み込むことです。rモードを使えば、テキストファイルの内容を簡単に取得できます。
構文
以下はファイルを読み込みモードで開く基本的な構文です。シンプルですが、多くの場面で活躍します。
open('ファイル名', 'r')
利用例
以下のコードはテキストファイルを開いて内容を読み込み、画面に表示します。ファイルの内容をそのまま取得したいときに便利です。
f = open('sample.txt', 'r')
content = f.read()
f.close()
print(content)
# 出力: sample.txtの内容が表示される
ファイルに書き込む(wモード)
次に、ファイルに新しい内容を書き込む方法です。wモードは強力ですが、既存のファイル内容を完全に上書きするので注意が必要です。
構文
以下はファイルを書き込みモードで開く基本的な構文です。この一行でファイルへの書き込み準備が整います。
利用例
以下のコードは新しいファイルを作成し、テキストを書き込みます。ファイルが存在しなければ新規作成し、存在すれば内容を消去して新たに書き込みます。
f = open('output.txt', 'w')
f.write('こんにちは')
f.close()
# 出力: output.txtというファイルが作成され、「こんにちは」という内容が書き込まれる
ファイルに追記する(aモード)
既存のファイル内容を残したまま、末尾に新しい内容を追加したい場合はaモードが最適です。ログファイルなどの追記に便利な機能です。
構文
以下はファイルを追記モードで開く基本的な構文です。この方法でファイルを開くと、既存の内容を保持したまま追加できます。
open('ファイル名', 'a')
利用例
以下のコードは既存のファイルに新しい内容を追記します。ファイルの最後に内容が追加されるため、必要に応じて改行文字も入れましょう。
f = open('output.txt', 'a')
f.write('追加の内容\n')
f.close()
# 出力: output.txtの末尾に「追加の内容」という文字列と改行が追加される
バイナリモードで操作する(rb, wbなど)
テキストだけでなく、画像や音声などのバイナリファイルを扱いたい場合は、バイナリモードを使います。モード名の後に「b」を付けるだけで、バイナリデータの読み書きが可能になります。
構文
以下はファイルをバイナリモードで開く基本的な構文です。読み込みと書き込み、両方の例を示しています。
open('ファイル名', 'rb')
open('ファイル名', 'wb')
利用例
以下のコードはバイナリファイル(画像など)を読み込んでコピーします。画像ファイルのバックアップや複製を作る際に役立ちます。
# rbモードで読み込み
f = open('image.jpg', 'rb')
image_data = f.read()
f.close()
# wbモードで書き込み
f = open('copy.jpg', 'wb')
f.write(image_data)
f.close()
# 出力: image.jpgのコピーがcopy.jpgとして作成される
with文を使う
ファイル操作で最も起こりがちなミスは、close()
の呼び出し忘れです。この問題を解決するのがwith
文です。with
ブロックを使えば、ブロックを抜けた時点で自動的にファイルが閉じられるため、安全にファイル操作ができます。
with文については以下でも説明してます。
構文
以下はwith文を使ったファイル操作の基本的な構文です。この方法を使えば、close()を明示的に呼び出す必要がなくなります。
with open('ファイル名', 'モード') as f:
# ファイル操作
pass # ここに処理を書く
利用例
以下のコードはwith文を使ってファイルを読み込みます。コードがシンプルになり、ファイルのクローズ忘れも防げるため、実務ではこの方法が最も推奨されています。
with open('sample.txt', 'r') as f:
content = f.read()
print(content)
# 出力: sample.txtの内容が表示される
応用例: 1行ずつ読み込む
ログファイルやCSVファイルなど、大きなファイルを扱う場合は、全内容を一度にメモリに読み込むと処理が重くなることがあります。そんなときは1行ずつ読み込む方法が効率的です。
以下のコードはファイルを1行ずつ読み込んで処理します。メモリ使用量を抑えられるため、数ギガバイトの大きなファイルでも安定して処理できます。
with open('sample.txt', 'r') as f:
for line in f:
print(line.strip()) # 改行を除去して表示
# 出力: sample.txtの各行が順番に表示される
まとめ
Pythonのopen関数は、ファイル操作を簡単かつ柔軟に行うための強力なツールです。この記事で解説した内容をまとめると以下のようになります。
- open関数は様々なモード(r, w, a, rb, wb等)でファイルを開くことができる
- 読み込み(r)、書き込み(w)、追記(a)の基本操作を目的に応じて使い分ける
- バイナリモード(rb, wb)を使えば画像や音声などのバイナリファイルも簡単に扱える
- with文を使うことでファイルの自動クローズが保証され、安全なコードが書ける
- 大きなファイルは1行ずつ読み込む方法を使えばメモリ効率よく処理できる
ファイル操作はデータ処理やログ管理など、多くの場面で必要となる基本スキルです。この記事で学んだ方法を活用して、効率的で安全なファイル処理を実装してみましょう。