【Python】
ファイルの読み書きを行う方法
テキストデータ・バイナリデータのファイル読み書き
投稿日 2023/11/26 更新日 2023/11/26
こんにちは。IT業界歴4年目の「元木皇天」です。
今回はPythonで、テキストデータ・バイナリデータをファイルで読み書きする方法について解説いたします。
やりたいこと
1. テキストデータをファイルで読み書きする
2. バイナリデータをファイルで読み書きする
参考文献
・Python Document - ファイルを読み書きする
・Python Document - open()
・入門 Python 3 第2版
環境
・OS:Debian GNU/Linux 12(Docker環境)
・Python:Ver 3.13
ファイルの読み書き基本
ファイルの読み書きを行うには「open()」メソッドを使用してファイルへのアクセス権を取得し、read()やwrite()メソッドを使用することで読み書きができます。
ファイル操作の基本となるopen()メソッドは以下の引数をとります。
open(filename, mode, encoding=None)
他にも引数を取れますが、一般的な用途では指定する必要はありません。
他の引数について詳細はこちらに記載されています。
Python Document - open()
各引数についてまとめるとこのようになります。
引数 | 説明 |
---|---|
filename | 読み書きするファイルのパスを指定します。 |
mode | 読み出し・書き込みのモードを指定します。どのようなモードがあるかは別途この表の下に記載しています。 |
encoding | 読み書きするファイルのエンコーディングを指定します。テキストデータの場合は基本「utf-8」を指定すると良いと思います。 バイナリデータの場合は指定できません。 |
open()メソッドのmode引数の種類
モード | 説明 |
---|---|
r | 読み出しモードでファイルを開きます。 mode引数を指定しなかった場合はデフォルト値としてこの値が設定されます。 |
r+ | 読み書きモードでファイルを開きます。 書き込みを行う場合、既存内容の末尾に追記して書き込みます。 |
w | 書き込みモードでファイルを開きます。 ファイルが存在しなかった場合は新しいファイルを作成します。 ファイルが既に存在していた場合は上書きで書き込まれます。 |
w+ | 読み書きモードでファイルを開きます。 書き込みを行う場合は上書きで書き込まれます。 ファイル新規作成扱いなので読み出ししても何も取得できないです。基本用途はないかと思われます。 |
x | 書き込みモードでファイルを開きます。 ファイルが存在しなかった場合は新しいファイルを作成します。 ファイルが既に存在していた場合はエラーになります。 |
a | 書き込みモードでファイルを開きます。 ファイルが存在しなかった場合は新しいファイルを作成します。 ファイルが既に存在していた場合は既存の内容の末尾に追記して書き込みます。 |
t | テキストモードでファイルを開きます。 rやwの次の2文字目に指定します(例:rt)。 2文字目を特に指定しない場合はデフォルト値としてこの値が設定されます。 |
b | バイナリモードでファイルを開きます。 rやwの次の2文字目に指定します(例:rb)。 バイナリデータを取り扱う際に指定します。 |
これらの引数と書く操作メソッドをうまく扱うことで、ファイルの読み書きが行えます。
次項でファイルの読み書きについて解説いたします。
テキストデータのファイル読み書き
まずはテキストデータをファイル読み書きする方法について解説いたします。
基本的には「open()」メソッドでファイルへアクセスし、read()・write()メソッドを使用することで実現します。
以下にコード例を記載していますのでご参考にしてください。
テキストデータのファイル読み出し
# テキストデータのファイル読み出し処理
with open("/storage/sample.txt", "r", encoding="utf-8") as f:
data = f.read()
f.read()でファイルの中身を取得できます。
なお、ファイルが存在しない場合はエラーとなるので注意が必要です。
実際のアプリケーションに組み込む際は、ファイルの存在チェックやtry-except文を使用することをお勧めします。
テキストデータのファイル書き込み
# テキストデータのファイル書き込み処理
with open("/storage/sample.txt", "w", encoding="utf-8") as f:
f.write("サンプル書き込み")
f.write()でファイルにテキストを書き込んでいます。
上書きしたくない場合等ありましたら、「a」「x」モードで使用すると良いと思います。
バイナリデータのファイル読み書き
次はバイナリデータをファイル読み書きする方法について解説いたします。
バイナリデータには、主に「画像」「動画」「音声」が当てはまります。
これらのデータをファイルで読み書きする場合は、バイナリモードでファイルの読み書きを行う必要があります。
基本的な処理の流れはテキストデータのファイル読み書きと同じです。
以下にコード例を記載していますのでご参考にしてください。
バイナリデータのファイル読み出し
# バイナリデータのファイル読み出し処理
with open("/storage/sample.png", "rb") as f:
data = f.read()
テキストデータと同様にf.read()でファイルの中身を取得できます。
注意点としては、open()メソッドの引数に「encoding」を指定するとエラーになるので注意してください。
バイナリデータのファイル書き込み
# バイナリデータのファイル書き込み処理
with open("/storage/sample.png", "wb") as f:
f.write(XXXXX) # XXXXXはバイナリデータ
f.write()でファイルにバイナリデータを書き込んでいます。
こちらもテキストデータ同様、上書きしたくない場合等ありましたら、「ab」「xb」モードで使用すると良いと思います。
まとめ
テキストデータを読み書きする場合は
open()メソッドで該当ファイルのパスを指定し、「r」「w」モードでファイルにアクセスして読み書きを行う。
バイナリデータを読み書きする場合は
open()メソッドで該当ファイルのパスを指定し、「rb」「wb」モードでファイルにアクセスして読み書きを行う。