with 文について、自分なりに理解した内容をまとめておきます。
with文とは?
with 文は、ファイルの読み書きやリソース操作の前後処理(例:ファイルを閉じるなど)を自動でやってくれる構文です。
たとえばファイルを開いて何か処理をしたあと、普通は close() を呼ぶ必要がありますが、それを自動でやってくれます。
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
このように書くと、with のブロックを抜けたタイミングで f.close() が自動的に呼ばれます。
普通に書いた場合との比較
通常の書き方
f = open('example.txt', 'r', encoding='utf-8')
content = f.read()
f.close() # ← 書き忘れるとファイルが閉じられない!
エラーが出たり close() を書き忘れたりすると、ファイルがずっと開いたままになってしまう危険があります。
with文を使った安全な書き方
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
# この時点で自動的にファイルが閉じられている
with 文はこのように安全にファイルを扱えるので、基本的にファイル操作では必ず使うべきと感じました。
open関数のおさらい
open() 関数はファイルを開くための関数で、よく使う構文は次のような形です。
open('ファイル名', 'モード', encoding='utf-8')
モード一覧
| モード | 意味 |
|---|---|
'r' |
読み込み(read) ※ファイルがないとエラー |
'w' |
書き込み(write) ※内容を上書きする |
'a' |
追記(append) |
'x' |
新規作成(ファイルがあるとエラー) |
'b' |
バイナリモード(画像など) |
't' |
テキストモード(デフォルト) |
たとえば、'wt' は「テキスト書き込み」、'rb' は「バイナリ読み込み」という意味になります。
よく使うファイルメソッドまとめ
ファイルオブジェクトには便利なメソッドがいくつかあるので、最低限覚えておきたいものをまとめておきます。
読み込み用
| メソッド | 説明 |
|---|---|
read() |
全体を読み込む |
readline() |
1行だけ読み込む |
readlines() |
行をリストで読み込む |
書き込み用
| メソッド | 説明 |
|---|---|
write() |
文字列を書き込む |
writelines() |
リスト形式で複数行を書き込む(改行は自分で付ける) |
その他便利なもの
| メソッド/属性 | 説明 |
|---|---|
seek(offset) |
ファイルの読み書き位置を変更する |
tell() |
現在の位置(バイト数)を返す |
flush() |
バッファを強制的に保存する |
closed |
ファイルが閉じているか(True/False) |
name |
ファイル名を取得 |
encoding |
使用中の文字エンコーディングを取得 |
おまけ:ファイル位置を操作する例
with open('example.txt', 'r', encoding='utf-8') as f:
print(f.tell()) # → 0(先頭)
f.read(5)
print(f.tell()) # → 5(5バイト読み進んだ)
f.seek(0)
print(f.read()) # → 最初から全体を再読込
まとめ
-
with文は後始末(closeなど)を自動で行う構文 - ファイル操作では
with open(...) as f:の形が安全で便利 -
open()にはモードやエンコーディングを指定できる - ファイルオブジェクトのメソッドも合わせて覚えておくと便利
最初は意味がわかりづらかったですが、ファイル操作では必須ともいえる構文なので、しっかり知識として定着させたいです。