Python では、テキストファイルや CSV ファイルなどの既存のファイルに、データを上書きしたり追記したりすることができます。また、新しいファイルを作って保存することもできます。
ここで、その方法を解説しますので、参考にして頂ければと思います。
1. Python でファイルに書き出す
ファイルの書き出しは、ファイルの読み込みと同じように、以下の 3 つのステップでワンセットです。
- open() 関数でファイルを開く。
- write() メソッドでファイルに書き出す。
- close() メソッドでファイルを閉じる。
特に、close() メソッドで、ファイルを閉じることを忘れる場合が多いので、必ず、この 3 ステップで覚えておきましょう。ファイルを閉じ忘れて、別のコードで同時に、そのファイルを操作してしまうと、厄介なバグが発生する原因になってしまいます。
それでは、実際のコードを見てみましょう。
fileobj = open("sample.txt", "w") #sample.txtを書き出しモードで開きます。
fileobj.write("This is me!") #write()メソッドでファイルに書き込みます。
fileobj.close() #最後にファイルを閉じます。
これで、sample.txt ファイルが作成されます。
解説しますね。
1.1. open() 関数でファイルを開く
まず、open() 関数で、新しいファイルを書き出しモード (“w”) で開いています。モードは、以下を使うことが多いので覚えておきましょう。
モード | 解説 |
“r” | 読み込み専用で開く(デフォルト)。書き出しは不可。 |
“w” | 書き出し専用に開く。ファイルが存在する場合は上書きし、まだない場合は新しいファイルを作る。読み込みは不可。 |
“w+” | 読み書きの両方ができるように開く。ファイルが存在する場合は上書きし、まだない場合は新しいファイルを作る。 |
“a” | 書き込み用に開く。ファイルが存在する場合は追記する。 |
今回、モードは “w” にしており、指定したファイル “sample.txt” はまだ存在しないので、新たにファアイルが作成されています。既存のファイルがある場合は、中身を消して上書きします。
また、今回、ファイルパスは、 “sample.txt” とテキスト名だけにしています。この場合、ファイルは、コンピュータの直下に作成されます。jupyter notebook を使っているなら、ホーム画面に追加されます。
open() 関数で指定するファイルパスやモードについては、「Python のファイルの読み込み方法まとめ」で、さらに詳しく解説しているので、そちらをご覧ください。
1.2. write() メソッドでファイルにデータを書き込む
次に、開いたファイルにデータを書き込むには、write() メソッドを使います。
fileobj = open("sample.txt2", "w")
fileobj.write("This is me!")
write() メソッドを実行すると、指定のデータ(今回は “This is me!” )が書き込まれ、その文字数が返ってきます。そして、テキストファイル (sample2.txt) には、”This is me!” という文字列が書き込まれています。
1.3. close () メソッドでファイルを閉じる
最後に、close() メソッドでファイルを閉じて、ファイルの書き出しを終了します。
上述の通り、ファイルの閉じ忘れは非常に多く発生します。そのため、with as 構文で、操作を終えた後にファイルを自動的に閉じる方法があります。次から解説しますね。
2. with as 文でファイルを自動的に閉じる
この構文を使って、ファイルを開くと、ブロック内の操作の実行後に、自動的にファイルを閉じてくれます。
with open("sample.txt", "w") as fileobj:
fileobj.write("This is me!")
「Python のファイルの読み込み方法まとめ」でも解説しているので、併せて確認しておきましょう。
3. ファイルに追記するにはモード “a”
open() 関数で既存のファイルを開く時に、モードを “a” にすると、そのファイルにデータを追記することができます。
上で、作成した sample.txt は、今、下図のようになっています。
これに、新たなテキストを追記してみましょう。
with open("sample.txt", "a") as fileobj:
fileobj.write("This is the greatest show \n")
fileobj.write("Rewrite the stars")
fileobj.close()
これで 2 つのテキストが追加されました。確認してみましょう。
ポイントとしては、テキストに改行を入れたい場合は、末尾に改行コードの (\n) を入力します。なお、改行については「Pythonの文字列の改行方法と便利な操作まとめ」で解説しています。
最初に作った “This is me!” の末尾には、この改行コードを入れていなかったので、追記した文が、すぐ後ろに追加されます。”This is the greatest show” の末尾には改行コードを入れているので、次に書き込んだ “Rewrite the stars” は、改行を入れて追加されていますね。
なお、改行コードを \n にしておけば、異なるプラットフォーム上でも機能しますので、覚えておきましょう。
4. 書き出したファイルの保存先をメニューから選ぶ
ファイルの読み込みと同様に、書き出したファイルの保存先をオープンダイアログで選ぶこともできます。
これを実現するには、GUI(グラフィカル・ユーザー・インターフェイス)を作るために便利な機能を備えたモジュールである tkinter モジュールを使います。このモジュールは、Webサービスやアプリを作る時に便利なので覚えておきましょう。
モジュールについては、「Pythonのモジュールについて抑えておくべき知識とよく使うもの一覧」で、tkinterモジュールについては、Pythonの公式ドキュメントで確認して頂ければと思います。
それでは、次のコードをご覧ください。
'''tkinter モジュールのインポート'''
import tkinter as tk
import tkinter.filedialog as tkfd
'''tkアプリウインドウを表示しないコード。書かなくても動作しますが、実用的ではありません。'''
root = tk.Tk()
root.withdraw()
'''保存先のダイアログを表示するコード'''
file = tkfd.asksaveasfilename(
title = "保存場所を選びましょう。",
filetypes = [("TEXT", ".txt")]
)
'''パスが選ばれた時に保存する'''
if file:
with open(file, "w") as fileobj:
fileobj.write("When the world becomes a fantasy")
print("ファイルを保存しました。")
このコードを実行すると、次のように、保存先を選ぶオープンダイアログが表示されます。
ファイル名を入力して、「Save」を選択すると、指定の場所にファイルが書き出されます。
WEBサービスなどを作る時のために、この方法も、頭の片隅に入れておくと良いでしょう。
5. まとめ
Python でファイルを書き出すときは、
- open() 関数でファイルを開く(※モードに注意)
- write() メソッドでデータを書き込む
- close() メソッドでファイルを閉じる
の 3 ステップで 1 セットです。ファイルを読み込む時と同様に、ファイルの閉じ忘れが起こりやすいです。そのため、with as 構文で、自動的にファイルを閉じる方法を活用すると良いでしょう。
また、ファイルの読み込みの時は、モードは “r” ですが、書き出しの時は “w” を使います。そして、”w” を使うと、全て上書き更新されてしまうので、もし既存の内容の後に追記したければ、”a” を選びます。新規のファイルを作る時は、どちらでも構いません。
ぜひお役に立てて頂ければ嬉しく思います。
コメント