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':新規作成モード
ファイルが存在していないことを前提に新しく作るモード。
既に存在しているとエラーになります。重要なデータを上書きしないように使いたいときに有効です。
'+':更新モード(読み書き両方)
読みも書きもしたいなら '+' を追加しましょう。
ただし、このときの書き込み動作は r、w、a のどれと組み合わせるかによって異なります。
例:
- '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年以上。
 すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
 この記事に間違い等ありましたらぜひお知らせください。