全般

[Python] open関数の各種モードの意味と使い方

今回は、Pythonにおけるopen関数の各種モードの使い方についてご紹介します。

open関数のモードとは

Pythonのopen関数は、ファイルの読み書きを行う際に使用します。

ファイルを開くときには、モードを指定することで動作を変えることができます。

主なモードは以下のとおりです。

  • r: 読み込み専用モード
  • w: 書き込み専用モード
  • a: 追記専用モード
  • x: 排他的作成モード
  • r+, w+, a+: 読み書き両用モード
  • b: バイナリモード
  • t: テキストモード

これらを適切に使い分けることで、さまざまなファイル操作を効率的に行えます。

基本的な使い方

読み込み専用 (r)

rモードは、既存のファイルを読み込み専用で開きます。

ファイルが存在しない場合はFileNotFoundErrorが発生します。

書き込み専用 (w)

wモードは、ファイルを書き込み専用で開きます。

既存のファイルがある場合は内容が切り詰められ、ファイルが存在しない場合は新規作成されます。

追記専用 (a)

aモードは、ファイルを追記専用で開きます。

既存のファイルがあれば末尾に追記し、ファイルが存在しなければ新規作成します。

排他的作成 (x)

xモードは、新しいファイルのみを作成して開きます。

同名ファイルが存在する場合はFileExistsErrorが発生します。

読み書き両用モード

ファイルを読み込みと書き込みの両方で扱いたい場合に使用します。

r+ モード

r+モードは、既存ファイルを読み書き両用に開きます。

ファイルが存在しない場合はエラーになります。

w+ モード

w+モードは、ファイルを書き込み専用+読み込みで開きます。

既存ファイルがあれば中身が切り詰められ、ファイルがなければ新規作成されます。

a+ モード

a+モードは、ファイルを追記専用+読み込みで開きます。

初期状態でファイルポインタが末尾にあるため、読み込みの際はseekで位置を調整する必要があります。

バイナリモードとテキストモード

t (テキストモード) は文字列としてファイルを扱い、b (バイナリモード) はバイト列としてファイルを扱います。

通常はテキストモードがデフォルトなので、エンコーディング指定が可能です。

バイナリモードの場合、画像や音声ファイルなどのバイナリデータをそのまま読み書きすることができます。

実行結果

画像データのバイト数: 12345

よくあるエラーや注意点

ファイルの存在しない状態でrr+を使うと、FileNotFoundErrorが発生します。

ww+を使うと、既存ファイルの内容が上書きされるため、重要なデータが消えないように注意してください。

a+ではファイルポインタが末尾にあるため、読み込みを行う際はseek(0)で先頭に戻す必要があります。

日本語やマルチバイト文字を扱う場合は、encoding=’utf-8′などを指定しないと文字化けを起こすことがあります。

ファイル操作後は、with文を使用して自動的に閉じるか、close()メソッドを呼んでリソースを解放してください。

まとめ

open関数のモードを正しく使い分けることで、安全かつ効率的にファイル操作を行えます。

読み込み専用や追記、バイナリモードなど、それぞれの特徴を把握することが大切です。

ファイルポインタの位置やエンコーディングなども確認し、最適な方法でファイルを扱いましょう。