デジタルトレンドナビ
システム開発

2024.05.01

Pythonのwith文とは?複数のファイルを同時に操作する方法やメリットを解説

Pythonのwith文とは?

Pythonでプログラミングをしていると、with文を多く見かける方も多いのではないでしょうか。with文は、頻繁に使う処理をすっきり記述できるほか、自動で動作させることが特徴です。プログラミングをするうえでは、誰でも読みやすく間違いのない記述が重要ですが、どちらも実現できる構文なのです。


今回は、with文にフォーカスして、概要と具体的な操作方法、使うメリットを解説します。Pythonを使い始めたばかりの方はもちろん、with文の理解を深めてコーディング力をアップしたい方も、ぜひ最後までご覧ください。

この記事でわかること

  • Pythonのwith文の概要
  • 2つ以上のファイルを操作する方法
  • with文を使用するメリット

【Python】with文とは?

【Python】with文とは?

Pythonで使うwith文とは、プログラムのなかでひとつの動作をするとき、前後の処理を自動で行う複合文です。本来は、ひとつの動作に対し、前後で必要な処理を記述しなければなりませんが、with文を使うことで前後の動作に対する記述が不要になります。


たとえば、ファイルを開くときは、ファイルを開く・読み込みや書き込みを行う、ファイルを閉じるという処理の記述を行います。しかし、with文を用いることでこの3つのステップの記述が不要となり、なおかつ自動でファイルを閉じてくれます。


3つのステップを記述するときよりも、短いコードですっきりするほか、閉じる記述の書き忘れなども防ぐため、より効率的かつ安全に業務を進められることが魅力です。


with文は、以下のように記述します。

with ファイルオブジェクト as 変数:
処理内容 

ファイルオブジェクトの部分には、ファイルを開くためのopen関数を当てはめます。open関数は、第一引数にファイルパスを、第二引数にはファイルをどのモードで開くかを入力しましょう。頻出するモードは、主に以下の3種類です。


  • ‘r’:読み込みモード。ファイルが存在しないときはエラーになる。また、モードの引数がない場合は自動的にこちらが適用される。
  • ‘w’:書き込みモード。ファイルが存在しないときは新規作成となる。すでに同名のファイルがある場合は上書きされる。
  • ‘a’:追記モード。ファイルが存在しないときは新規作成となる。ファイルがあるときは、既存の内容に続いて追記される。

参考として、with文を用いて「おはよう」と書かれたテキストを読み込むケースを紹介します。

※with文を使った場合

with open(‘test.txt’, ‘r’) as file:
print(file.read())

結果:おはよう

with文を使わなかった場合も確認してみましょう。次のように、コードの行数が多くなっていることが分かります。

※with文を使わなかった場合

file=open(‘test.txt’,’r’)
text=file.read()
print(text)
file.close()

結果:おはよう

複数のファイルをまとめて操作する方法

複数のファイルをまとめて操作する方法

プログラミングをするうえでは、2つ以上のファイルを操作するケースが珍しくありません。with文では、複数のファイルをまとめて操作することもできます。


記述方法が決まっているわけではありませんが、いくつか書き方があるので紹介します。自分が見やすいと感じる方法を試してみてください。

記述方法1
with open(“file1”) as file1:
with open(“file2”) as file2:
with open(“file3”) as file3:
print(file1.read(), file2.read(), file3.read())

with文をネストにして2つ以上のオブジェクトを扱う方法です。数が増えるほど階層が深くなるため見づらく感じるケースもあります。

記述方法2
with open(“file1”) as file1, open(“file2”) as file2, open(“file3”) as file3:
print(file1.read(), file2.read(), file3.read())

横につなげて記述する方法です。ただし、オブジェクトの数だけ長くなる点がネックです。

記述方法2(改行)
with open(“file1”) as file1, \
open(“file2”) as file2, \
open(“file3”) as file3:

print(file1.read(), file2.read(), file3.read())

記述方法2を改行するときは、1つのオブジェクトの終わりに「\」をいれます。そのまま改行するとエラーになるので注意が必要です。

記述方法3(Python3.3以降)
from contextlib import ExitStack

with ExitStack() as stack:
file1 = stack.enter_context(open(“file1”))
file2 = stack.enter_context(open(“file2”))
file3 = stack.enter_context(open(“file3”))

  print(file1.read(), file2.read(), file3.read())

Python3.3以降の場合はcontextlib.ExitStackの使用ですっきり記述することができます。

記述方法4(Python3.9以降)
with open(“file1”) as file1, open(“file2”) as file2, open(“file3”) as file3:
print(file1.read(), file2.read(), file3.read())

Python3.9以降なら、オブジェクトをタプルのように指定した記述も可能です。改行なしのシンプルな方法だといえます。4つの記述方法を紹介しましたが、自分が書きやすいもの、見やすいと思うものから試してみてください。

with文を使うメリット

with文を使うメリット

with文を使うと、コードがすっきりと短く書けることがわかりましたが、with文のメリットは見た目だけではありません。ほかにも開発者にとってうれしいメリットがあります。ここでは、with文を使うメリットを解説します。


close漏れの防止

ファイルの操作を記述するときは、Pythonビギナーでも慣れている人でもclose漏れが意外と多いです。with文を使うと自動でcloseしてくれるので、記載し忘れを防止できます。close漏れはエラーの原因にもなるため、人的ミスを防ぐ観点から見ても有効です。

ソースの読みやすさの向上

with文は、1つのブロックとして記述するため、ソースそのものが読みやすくなることもメリットです。同じくブロックを生成するものには、def文やif文がありますが、これらもすっきりと読みやすく感じます。


なお、with文は記述した処理がインデントされるため、どこからどこまでがwith文で処理するのかをひと目で把握できます。誰が見てもわかりやすい記述は、開発者にとって重要なポイントです。こうしたことからも、Pythonではwith文がたくさん使われているのです。


Pythonの代表的な複合文のなかに、for文というものがあります。こちらの記事では、for文の基本的な書き方や使い方を解説します。ぜひあわせてご覧ください。


まとめ

まとめ

今回は、Pythonのwith文について紹介しましたがいかがだったでしょうか。今、Pythonを学んでいる方や、開発者に使っている方のなかには、with文をたくさん見る方も多いと思いますが、プログラミングにおいて作業効率のアップや安全な記述ができることは、大きなメリットです。


記述方法は好みが分かれるところもありますが、with文を使わないケースに比べてだいぶすっきりすることは明確です。さらにclose漏れの防止もできることから、エラーを防ぐことにも貢献します。


with文を使いこなすと、誰が見てもわかりやすく、人的ミスのすくないコードを記載できるため、自身のスキルアップにもつながります。この機会にぜひ、with文の理解を深め、正しいコーディングに役立ててください。


投稿者

  • デジタルトレンドナビ編集部

    システム開発、Webサイト制作、ECサイトの構築・運用、デジタルトランスフォーメーション(DX)など、デジタルビジネスに関わる多岐の領域において、最新のトレンド情報や実践的なノウハウを発信してまいります。