Pythonでファイルに書き込む方法について書いています。
ファイルに書き込むにはopen関数を使って取得したファイルオブジェクト対して、writeメソッドを使用して書き込んでいきます。
実際に動作するサンプルコードを使って解説します。
載せているサンプルコードはPythonのバージョン3.10.5で動作検証しました。
Pythonでファイルに書き込むには?
Pythonでファイルに書き込みを行うときには、open関数を使ってファイルを開いた後に、writeメソッドで書き込んでいきます。
例えば、下記のように使います。
file = open("test.txt", "a")
file.write("hello!!")
file.close()
最初にopen関数でファイルを開きます。
open関数の第1引数は開くファイルのパスです。
第2引数はファイルを開くときのモードになります。
今回は「test.txt」というファイルを追記モード(“a”)で開いています。
追記モードはファイルに追記していくモードです。
ファイルがない場合には、新規でファイルを作って書き込んでくれます。
open関数で開いた結果をfile変数に受け取っています。
返ってくるのはファイルオブジェクトです。
ファイルオブジェクトからwriteメソッドを呼び出して、書き込みたい内容を渡しています。
今回は「hello!!」を渡しています。
これで、ファイルに書き込むことができます。
最後にファイルオブジェクトのfile変数からcloseメソッドを呼び出して、ファイルを閉じています。
ファイルを上書きする
ファイルを上書きしたい場合には、上書きモード(“w”)を使います。
先ほどのプログラムを実行すると、毎回ファイルに追記されていきます。
ですが、下記のように上書きモード(“w”)にすると、ファイルの内容を上書きします。
file = open("test.txt", "w")
file.write("hoge!!")
file.close()
writeメソッドが呼ばれた回数分はファイルに書かれます。
なので、下記のようにすると、複数の値を一緒にファイルへ上書きすることになります。
file = open("test.txt", "w")
file.write("hoge!!")
file.write("test123!!")
file.write("abctest!!")
file.close()
ファイルを新規のときだけ作成する
ファイルが存在しないときだけ、ファイルを作成して書き込むには新規書き込みモード(“x”)を使います。
先ほどのプログラムのファイルモードの箇所を、新規書き込みモード(“x”)に変えてみます。
こうすると、ファイルがない場合だけ、ファイルを作成して書き込みます。
file = open("test.txt", "x")
file.write("testABC!!")
file.close()
既にファイルがある場合には、下記のような例外が発生します。
ファイルが既にあるという内容のエラー(FileExistsError
)です。
FileExistsError: [Errno 17] File exists: 'test.txt'
FileExistsErrorを回避したい
例外を回避したいときには、try except
で例外処理をするように書いておきましょう。
下記のように、try except
で例外が発生する可能性のある処理ブロックを囲みます。
try:
file = open("test.txt", "x")
file.write("testABC!!")
file.close()
except FileExistsError:
print("ファイルが既に存在します。")
例外が発生したときには、FileExistsError
でキャッチして、その配下の処理が動きます。
上記のコードの場合には、「test.txt」が既にあった場合にはFileExistsError
例外が発生します。
exceptで例外をキャッチして、「ファイルが既に存在します。」が出力されて処理が終わります。
ファイルに書くときに改行したい
ファイルを書くときに改行したいときには、改行したい箇所で、改行コード(“\n”)を入れましょう。
例えば、下記のようにすることで、改行できます。
file = open("test.txt", "w")
file.write("hello!!\n")
file.write("world!!\n")
file.write("test!!!")
file.close()
「test.txt」を上書きモード(“w”)で開いています。
その後にwriteメソッドを呼び出して、3回書き込みました。
最初の2行の最後に改行を入れているので、書き込まれた後に改行されます。
実際に書き込まれたファイルを確認すると、下記のように出力されました。
hello!!
world!!
test!!!
with句を使って、closeを省略する
with句を使うことで、closeを省略して書くことができます。
例えば、下記のように使うことができます。
with open("test.txt", "w") as file:
file.write("hello\n")
file.write("world!!")
with
の後にopen関数を書いて、ファイルを開いています。
as
の後のfile変数が開いたファイルのファイルオブジェクトになります。
その配下のインデントされた処理ブロックで使うことができます。
writeメソッドを使って、ファイルに書き込んでいます。
今回の場合だと、2つのwriteメソッドの処理が終わると、ファイルが自動的に閉じられます。
閉じ忘れることもないので、基本的にこちらを使う方が良いかもしれません。
文字コードを指定する
名前付き引数のencoding
を使うことで、ファイル書き込み時の文字コードを指定できます。
例えば、シフトJISで書き込むには、下記のように指定してopen関数を使います。
with open("test.txt", "w", encoding='shift_jis') as file:
file.write("アイウエオ\n")
file.write("テスト!!!")
open関数の引数として、encoding
を使って、「shift_jis」を指定しました。
このようにすると、シフトJISでファイルに書き込まれるようになります。
Pythonでファイルopen時のモードまとめ
Pythonでファイルに書き込む際のモードをまとめます。
open関数で、ファイルを開くときの2つ目の引数の内容になります。
モード | 内容 |
---|---|
a | 追記モード。ファイルがない場合は作成してくれる。毎回ファイルの最後に追記される。 |
w | 上書きモード。ファイルがない場合は作成してくれる。実行するとファイルの内容を上書きする。 |
x | 新規書き込みモード。ファイルがないときだけ作成して書き込める。既にある場合には例外が発生する。 |
closeでファイルを閉じないときの注意点
closeメソッドでファイルを閉じない場合、プログラムが正常終了しても内容が書き込まれないことがあるとのことです。
公式ページのこちらに記載がありました。
ファイルの閉じ忘れに注意しましょう。
with句の方を積極的に使うと良さそうです。
おわりに
今回はPythonでファイルに書き込む方法について、確認していきました。
ファイルを書き込む際には3つのモードが存在しました。
それぞれのモードで挙動が違ったので、書き込みモードに注意して使っていくようにしましょう。
コメント