Pythonのファイル操作を使うと数百あるファイルをボタン一つで変更できるとう非常に便利なものですね。
今回はファイルに書き込むときや上書きするとき、またファイルから読み込むときの方法を解説していきます。
この記事の内容はファイルを開くときに使うopne関数やwith文を知っているとして進めます。
open関数の読み書きモード
ファイルを開くと気に使うopen関数にはどのモードでファイルを開くのかを決めるオプションがあります。
1 |
opne(ファイルパス, オプション, 文字エンコード ) |
2つ目の引数に指定する値によって読み込み専用や書き込み専用がわかれます。
ここからは、これらのオプションをより詳しく見ていきましょう。そのためにサンプル.txtというファイルを操作していきたいと思います。このファイルの中身は以下のようになっています。
1 2 |
Hello World! こんにちは |
このテキストファイルを保存するときは「utf-8」にしておかないと「UnicodeDecodeErro」がでます。
opne関数で開いたファイルはファイルオブジェクトが作られます。そのオブジェクトに使えるのが、以下で紹介するwriteメソッドやreadメソッドです。
読み込み:r
- readメソッド:ファイルに書かれている文字を取得
- オプションで「r」を選択しているのでreadメソッドを使える
1 2 3 4 5 6 7 |
with open("サンプル.txt", "r", encoding='utf-8') as f: #読み込みモード print(f.read()) #出力結果 Hello World! こんにちは |
もしオプションに「w」を選択するとreadメソッドは使えません。逆に「r」を選択しているときにwriteメソッドは使えません。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
with open("サンプル.txt", "w", encoding='utf-8') as f: print(f.read()) #エラー io.UnsupportedOperation: not readable with open("サンプル.txt", "w", encoding='utf-8') as f: f.write('さようなら') print(f.read()) #エラー io.UnsupportedOperation: not writable |
書き込み(上書き):w
- writeメソッド:ファイルに追記する
- ファイルを上書き保存する
1 2 3 |
with open("サンプル.txt", "w", encoding='utf-8') as f: #上書きモード f.write('さようなら') |
これは上書きなので元あったデータはなくなります。「サンプル.txt」を確認すると以下のようになっています。
1 |
さようなら |
- ファイルが存在しない場合は新規作成する
1 2 3 |
with open("サンプル2.txt", "w", encoding='utf-8') as f: #上書きモード f.write('さようなら2') |
「サンプル2.txt」というファイルは存在しないので新規で作成されて以下のように「さようなら2」と書き込まれています。
1 |
さようなら2 |
書き込み(追記):a
- writeメソッド:ファイルに追記する
- ファイルの末尾にデータが追加される
1 2 3 |
with open("サンプル.txt", "a", encoding='utf-8') as f: #追記モード f.write('さようなら') |
この処理を実行してから「サンプル.txt」を確認すると、以下のようにファイルの末尾に「さようなら」が追加されています。
1 2 3 |
Hello World! こんにちは さようなら |
このモードの場合もファイルがない場合は新規作成されます。
新規作成:x
- writeメソッド:新規ファイルに書き込み
- 既存のファイルを指定するとエラー「FileExistsError」
1 2 3 4 5 6 |
with open("サンプル2.txt", "x", encoding='utf-8') as f: #新規作成モード f.write('さようなら2') #サンプル2.txt さようなら |
1 2 3 4 5 6 |
with open("サンプル.txt", "x", encoding='utf-8') as f: #新規作成モード f.write('さようなら') #出力結果 FileExistsError: [Errno 17] File exists: |
読み書きモード:+
- w+:上書きと読み込み
- a+:末尾に追記と書き込み
- r+:先頭から上書きと読み込み
1 2 3 4 5 6 7 8 9 10 11 |
with open("サンプル.txt", "w+", encoding='utf-8') as f: #読み書きモード f.write('ABC') #サンプル.txt ABC with open("サンプル.txt", "w+", encoding='utf-8') as f: print(f.read()) #何も出力されない |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
with open("サンプル.txt", "a+", encoding='utf-8') as f: #読み書きモード f.write('ABC') #サンプル.txt Hello World! こんにちは ABC with open("サンプル.txt", "a+", encoding='utf-8') as f: print(f.read()) #なにも出力されない |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
with open("サンプル.txt", "r+", encoding='utf-8') as f: #読み書きモード f.write('ABC') #サンプル.txt ABClo World! こんにちは with open("サンプル.txt", "r+", encoding='utf-8') as f: print(f.read()) #出力結果 lo World! こんにちは |
「r+」でreadメソッドを使った出力結果とファイルに書き込まれている結果が異なるので注意してください。
3つのモードでサンプル.txtの結果が異なります。それぞでどの部分が変更されているのか確認しておく必要があります。
また、どのモードでもwriteメソッドは使えますが、readメソッドの挙動は異なります。表示されないだけでエラーにはなりません。
まとめ
- 書き込みモード:w(上書き)、a(追記)
- writeメソッドを使える
- 読み込みモード:r
- readメソッドを使える
- 新規作成モード:x
- 読み書きモード:+
- ファイル操作で使うosモジュールの関数16個まとめ
- ファイルを読み込む手順【open・close・path・withの使い方】
- ファイルに書き込み・上書き・読み込みする5つの方法【open関数のモード選択】
- フォルダ内のファイル名を取得・名前を変更する方法
- ファイル・フォルダを削除・作成する方法
- 絶対パスと相対パスの判定・変換する方法
- ファイル・フォルダを移動・コピーする方法【shutilモジュールの使い方】
- ファイルを読み込む5通りの方法【リスト・for文・一行ずつ】
- ディレクトリツリーを取得してファイル一覧を表示する方法【os.walkの使い方】
- ファイル・フォルダがあるかどうかの存在確認と判定する方法
プログラミング言語のなかでも人気の高いPythonを学習する教材を紹介します。 最近ではプログラミングスククールがたくさんあるので迷うと思います。 ですが、まずは無料教材から始めてみましょう。苦労した分だけ力がつきます。 […]