【Python入門】with文の概要や使い方(openでの操作/例外処理など)を解説
Pythonでは、外部のファイルを開くための関数としてopen()
があります。
この際、ファイル操作後の終了処理を省くため、with
文とともに用いることが多いです。
しかし、「そもそもwith
文とは?」「with
文を使うと何ができるのか」と疑問を持つ方もいるかもしれません。
この記事では、with文の概要や使い方、open関数を用いた活用方法(ファイル操作や例外処理)について解説します。
with文とは
with
文は、処理の終了とともに冒頭で指定した設定を開放する (元に戻す) ための記述法です。
例えば、open()
関数にてファイルを開いた場合、操作が終わった後はclose()
メソッドでファイルを閉じる必要があります。
これは、容量が大きいファイル等を開きっぱなしにしておくと、プログラムの動作や処理速度に影響を及ぼす可能性があるためです。
(普段PCを使う際、アプリや検索エンジンのタブを開きすぎると操作が重くなる感覚に近いです)
一方with
文では、close()
メソッドを使わなくても、内部の処理が終わると同時に自動でファイルを閉じる(元の状態に戻す)ことができます。
またwith
文の場合、途中でエラーが発生した場合にも対応できるといったメリットが挙げられます。
基本的な使い方
with
文の記述方法として、「対象処理(with
以降で記述)」にて記述した設定が、with
文の実行中に保持される形となります。
その際、対象となる設定は「変数名(as
以降に記述)」に保持され、処理時に使用が可能となります。
また、Pythonではインデント(字下げ)した内容に対して「この部分がwith
文で行う処理」と認識する仕様になっています。
そのため、処理内容については必ず字下げを行うようにしてください。
path = r"Data\Sample.txt" # pathという変数で、sampleファイルのパス(所在)を保持
with open(path) as f: # open関数にて開いたファイルの内容をfに保持
print(f) # fの中身を表示
open関数を用いた活用方法
冒頭でも書いた通り、with
文を使用する際はopen()
関数とともに用いることが多いです。
ここから先では、with文でファイルを開く場合の応用事例について紹介していきます。
複数ファイルを開きたい場合
一度に複数のファイルを指定したい場合は、カンマ区切りでopen()
関数を記述します。
各ファイルのパスごとに変数名を付与できるため、処理を行う際にも別々に呼び出して処理が可能です。
path_a = r"Data\Sample.txt" # pathという変数で、sampleファイルのパス(所在)を保持
path_b = r"Data\Sample2.txt" # pathという変数で、sampleファイルのパス(所在)を保持
with open(path_a) as f_a, open(path_b) as f_b: # 各ファイルの内容をf_a、f_bに保持
print(f_a.read()) # f_aの中身を表示
print(f_b.read()) # f_bの中身を表示
例外(エラー)処理を行いたい場合
「with文とは」にも記載した通り、with
文ではファイル操作に失敗しても自動で終了処理を行うことができます。
一方で、例外が発生した場合でもファイルを閉じたくない(プログラムの実行を続けたい)場合は、try
文を併用します。
try
文のうち、try
節では実行内容を、except
節では対象となるエラーが発生した場合の処理を指定します。
try
文を活用すれば、例外が発生した場合でも実行を止めることなく対処することが可能です。
path = r"Data\Sample.txt" # pathという変数で、sampleファイルのパス(所在)を保持
with open(path) as f: # open関数にて開いたファイルの内容をfに保持
try: # 以下の処理を実行
print(f.read()) # fの中身を表示する
except FileNotFoundError as err: # FileNotFoundErrorが発生した場合、以下の処理を実行
print(err) # errの中身を表示
try文については、こちらの記事で詳しく解説しています
まとめ
この記事では、with文の概要や使い方、open関数を用いた活用方法(ファイル操作や例外処理)について解説しました。
with
文を活用すれば、記述量をおさえつつ例外発生時にもしっかりと対処を行うことができます。
Pythonを扱う上では欠かせない存在ですので、しっかりと基礎を押さえておくようにしましょう。