Pythonのopen()関数におけるモード(引数)の略語をわかりやすく解説!

こんにちは。ゆうせいです。
今回は、Pythonでファイルを読み書きする際によく使われる open() 関数について、新人エンジニア向けに丁寧に解説していきますね。

特に「rって何?」「wbとかって何が違うの?」という疑問を持っている方に向けて、引数の略語の意味をわかりやすく説明していきます!


Pythonの open() 関数とは?

Pythonでファイルを扱うには open() 関数を使います。

f = open("example.txt", "r")

この例では、「example.txt」というファイルを "r" モードで開いています。
でもこの "r" って、一体何なのでしょう?


ファイルを開くモードの略語一覧

以下の表に、open() 関数のモード(=第2引数)の略語と意味をまとめました。

モード読み方意味
'r'read読み込み専用(既存ファイル)
'w'write書き込み専用(内容を全消去)
'a'append追記専用(内容を追加)
'b'binaryバイナリモード(画像や音声ファイル用)
't'textテキストモード(文字ファイル、デフォルト)
'x'exclusive create新規作成(すでに存在していたらエラー)
'+'update読み書き両方可能にするオプション

モードの組み合わせ例

モードは組み合わせて使うことができます。いくつか代表的な例を見てみましょう。

モード説明
'rb'バイナリファイルの読み込み(例:画像)
'wb'バイナリファイルの書き込み(例:音声データ保存)
'r+'読み書き両方可能、ファイル内容は保持
'w+'読み書き両方可能、ファイル内容は削除される
'a+'読み書き両方可能、追記モードで書く

それぞれのモードの使い分け方

'r':読み込み専用モード

既に存在するファイルを読むだけのときに使います。
例えるなら、図書館の本を読むイメージです。中身を書き換えることはできません。

注意:ファイルが存在しないとエラーになります!


'w':書き込み専用モード

ファイルを書き込むけれど、中身は全部消されてしまうのがこのモード。
たとえるなら、真っ白なノートに書き始める感じ。

既存の内容が必要な場合は要注意です!


'a':追記モード

ファイルの最後にデータを追加したいときに使います。
たとえば、ログファイルのように、既存の記録を残しながら新しい記録を加えたいときに便利。


'b':バイナリモード

バイナリファイルとは、画像・音声・動画など「非テキストデータ」です。
これを扱うときは 'b' を使います。
例:'rb' で画像ファイルを読み込む。


't':テキストモード

デフォルトなので省略してもOK。普通のテキストファイルを扱うときはこちらを使います。
例:open("memo.txt", "r")open("memo.txt", "rt") と同じ意味です。


'x':新規作成モード

ファイルが存在していないことを前提に新しく作るモード。
既に存在しているとエラーになります。重要なデータを上書きしないように使いたいときに有効です。


'+':更新モード(読み書き両方)

読みも書きもしたいなら '+' を追加しましょう。
ただし、このときの書き込み動作は rwa のどれと組み合わせるかによって異なります。

例:

  • 'r+' → 中身は消さずに読み書きOK
  • 'w+' → 中身は消してから読み書きOK
  • 'a+' → 中身を消さず、追記しながら読みもできる

図で理解する:各モードのイメージ図

既存ファイル: [abcde]

モード    操作結果(内容)
-----------------------------
'r'      読むだけ → [abcde]
'w'      全消去して書く → []
'a'      書き足す → [abcde + 新規内容]
'r+'     読み書き(内容保持)→ 編集可
'w+'     読み書き(内容全消去)→ []
'a+'     読み書き(追記)→ [abcde + 新規内容]

よくあるエラーと注意点

  • 'r' モードでファイルが存在しないと FileNotFoundError が出ます
  • 'w' モードは既存のファイルを上書きしてしまうため、慎重に!
  • 'rb''wb' では、文字列ではなく bytes 型でデータを扱います

実際に使ってみよう!

例:画像ファイルを読み込む

with open("photo.jpg", "rb") as img:
    data = img.read()

例:ログファイルに追記

with open("log.txt", "a") as log:
    log.write("処理が完了しました\n")


まとめ

ファイルモードの引数は、たった一文字で大きく動作が変わる重要なパラメータです。
略語ばかりで最初はわかりにくいですが、一つ一つの意味を理解すると一気にスムーズになりますよ!

セイ・コンサルティング・グループでは、新人エンジニアの方がPythonプログラムを写経できるタイピングゲームを無償公開中です。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。