[Python] テキストファイルに書き込みをする方法【初心者向け】

Python
この記事は約6分で読めます。
微妙な気分の女性
微妙な気分の女性

下の記事を読んで、Pythonで日本語を含むテキストファイルを読み込ませてファイルの中身をウインドウに表示させる事は出来るようにはなったんだけど、これはウインドウに表示された処理結果を毎回コピペして使わないといけないって事?

情報を小出しにするモグラ
情報を小出しにするモグラ

処理結果をファイル出力する事は当然可能です。
Pythonのファイル操作は、直感的で分かり易いですよ。

本記事に記載のPythonスクリプト動作確認環境

OS : Windows10(64bit版)
Python version : 3.7.3

スポンサーリンク

Pythonでテキストファイルに書き込みをするソースコード

先日の記事で紹介した以下のソースコードをベースに、ファイルに書き込みをするソースコードを作ってみます。

テキストファイル読み込みソースコード
f = open(r"C:\Python_source\01_TextFileRead\SampleTextSJIS.csv")
for line in f:
    print (line, end="")

このソースについては、以下の記事で1行毎に説明をしています。

ファイル読み込みソースコードをベースに作成した、テキストファイル書き込みソースコードは以下となります。

テキストファイル書き込みソースコード(コピペでご使用ください)
f = open(r"C:\Python_source\01_TextFileRead\SampleTextSJIS.csv")
f_w = open(r"C:\Python_source\01_TextFileRead\SampleWriteText.csv","w")
for line in f:
    f_w.write(line)
f_w.close()

ファイルのパスは必要に応じて修正をお願いします。
このソースコードを実行すると、”SampleTextSJIS.csv” と全く同じファイル “SampleWriteText.csv” が生成されます。

それではベースとしたファイル読み込みソースコードから追加・変更のあった、2,4,5行目について1行ずつ確認していきます。

2行目:: f_w = open(r”C:\Python_source\01_TextFileRead\SampleWriteText.csv”,”w”)

OPEN関数 -> ファイルを開く

色々とファイルを操作できる、ファイルオブジェクトを返します。
OPEN関数の引数は以下となります。

 ファイルオブジェクト = OPEN(開くファイル名,モード,エンコーディング名)

続けて引数の詳細を見ていきます。

開くファイル名

OPEN関数の1つ目の引数として、ディレクトリのパスも含めてファイル名を記載します。絶対パスでも相対パスでも良いです。ファイル名だけとした場合は、相対パスとしてPyhtonの実行ディレクトリにファイルが作成されます。

モード

必要な場合に2つ目の引数として与えます。以下に表でまとめます。

モード引数 説明
r 指定されたファイルをリードモードで開きます。
モード引数を与えない場合は “r” が初期値で与えられます。
w 指定されたファイルをライトモードで開きます。指定先にファイルが
無い場合は作成します。指定先にファイルがある場合は上書きします。
a 指定されたファイルへ追記します。
b ファイルをバイナリモードで開きます。”rb” や “wb” というように、
他のオプションと組み合わせて使用します。

今までの記事ではファイルのリードだけを扱ってきたので、このモード引数は省略してきましたが、ファイルをライトする場合はモード引数を必ず与える必要があります。

ちょっとしたプログラムであれば上表で紹介したモードで事足りると思いますが、ファイルをリードしながらライトしたいなどという場合は、r+ というオプションを与える事で実現可能です。他にもモード引数は存在するので、必要に応じて調べてみてください。

あとバイナリモードについては、プログラム初心者がとっつきにくい内容と思われるので、近日中に別の記事で紹介したいと思います。

エンコーディング名

OPEN関数の引数として与える場合、encoding=”euc_jp” というフォーマットで与えます。引数名が明示されているので、モード引数を省略した場合は第2引数としても問題ありません。

ここで2行目を

f_w = open(r”C:\Python_source\01_TextFileRead\SampleWriteText.csv”,”w”, encoding=”utf_8″)

とした場合、生成されるテキストファイル “SampleWriteText.csv” の 文字コードは、 UTF-8 となります。Windowsでの初期値は shift_jis となります。

日本語を扱う場合に指定する事があるかと思われるPythonのエンコーディング名は、
“utf_8”, “shift_jis”, “ascii”, “euc_jp”, “iso2022_jp” となります。

Pythonのエンコーディング名 と文字コードの対応については、次の記事のPythonで扱う文字コードの種類を参照してください。

4行目:: f_w.write(line)

Python ファイルオブジェクトのWrite()メソッド

f_wはファイルを生成するために、ライトモードで生成したファイルオブジェクトです。
このファイルオブジェクトをライトメソッド write()を用いて、f_w.write(line) という操作をすることで、文字列変数であるlineの中身を書き出す事が出来ます。

変数ではなく、以下のように直接文字列を打ち込む事も出来ます。
f_w.write(“つちもぐらが好きですか?”)
f_w.write(”大好きです”)

5行目:: f_w.close()

Python ファイルオブジェクトのclose()メソッド

ファイルオブジェクトへclose()メソッドでアクセスを行うと、そのオブジェクトを破棄できます。平たく言えば、ファイルを閉じます。

Pythonを終了すればファイルオブジェクトは自動的に破棄される、言い換えるとファイルは閉じられるのですが、Pythonを終了しない場合、ライトモードで開いたファイルはずっとPythonが開きっぱなしの状態となります。

自分で何かしらのPythonスクリプトを組んで実行した場合、直ぐにその結果、今回であれば生成したファイルの中身を確認したくなるかと思いますが、close()メソッドで終了する事で解決する事があります。

小さなスクリプトの場合はclose()メソッドでファイルオブジェクトを終了しなくても問題が起きる事はほとんどないはずですが、不要となったファイルオブジェクトは、開いたモードによらず close()メソッドで終了しておいた方が無難でしょう。

これでファイルをリードして、別ファイル名で保存する事が出来るようになったと思います。実作業では、リードしたファイルの中身を加工してから別ファイルで保存する事になるかと思います。この辺りはまた近日中に記事にしたいと思います。

最後まで読んで頂き、ありがとうございました。

タイトルとURLをコピーしました