Python3超入門講座【第13回】「ファイル入出力」


はじめに

今回はPython3のファイル入出力を学びます。せっかくプログラムを作ったのに保存できないんじゃつまらないですよね!

まずはテキストファイルに保存する方法を学びましょう。

Python3におけるファイルへの書き込み

主なモード

ファイル入出力にはモードという概念が存在します。まずはモードを理解しましょう。

よく使うモード 意味
r ファイルの読み込み
w ファイルへの上書き/指定したファイルがない場合は新規作成
a 指定したファイルの末尾に追記する

これらのモードを使い分けて、テキストファイルに文字データを保存する方法を学んでいきましょう。

以下のサンプルコードは最も基本的なテキストファイルへの文字列の書き込みです。

【サンプルコードの解説】

open()メソッドを使って、上書きモード(w)で、テキストファイルへ接続します。

sample.txtというファイルが存在しない場合は、自動的に新規作成されます。

[open()メソッドの書式]

変数名 = open(ファイル名, モード)

この時点でテキストファイル、sample.txtとの接続が確立されています。

ファイルオブジェクト.write(文字列)と書くことで、文字列がファイルに書き込まれます。

ファイルオブジェクト.flush()と書くことで、Pythonからファイルへ移動中のデータをクリアすることができます。

ファイルにデータを書き込む際は、必ずflush()メソッドを書くようにしましょう。

最後にファイルオブジェクト.close()とすることで、ファイルとの接続を切ります。

close()メソッドも必ず忘れずに書くようにして下さいね。

Pythonのプログラムが格納されているディレクトリ(フォルダ)にsample.txtというファイルが生成されます。

例えば、c:\python\sample_codeというディレクトリに、save.pyというファイル名で、上記のサンプルコードを保存したとします。そして、コマンドプロンプトやターミナルからsave.pyを実行したとします。その場合、c:\python\sample_codeの中に、sample.txtというテキストファイルが生成されています。是非、中身を開いて、ちゃんと指定した文字列がsample.txtに書き込まれているか確認してみて下さいね!

次は改行を含む、文字列をテキストファイルに書き込む方法を解説します。

改行を加えるのは簡単です。改行コードを文字列の改行したい位置に挿入すれば良いのです。改行コードは\nです。\nは環境によっては¥n(半角)と表示される場合もあります。

改行を含む文字列をテキストファイルに保存するサンプルコード

<実行結果(kaigyou.txtの中身)>

\nまたは“”の中に記述します。実行結果を見れば分かる通り、kaigyou_strの中の\nが挿入されている箇所でちゃんと改行されていますね!

尚、文字列が書き込めるのは、テキストファイル(~.txt)に限ったことではありません。次のサンプルコードでは、PythonのプログラムをPythonファイル(~.py)に書き込んでみます。

PythonファイルにPythonのコードを書き込むサンプルコード

test.pyというPythonファイルが生成されているはずです。コマンドプロンプトやターミナルからtest.pyを実行すると、ちゃんと144と画面に表示されます。

次は追記モード(a)を試してみましょう。

追記モード(a)のサンプルコード

<実行結果(ファイルの中身)>

もし上記のサンプルコードで、wを指定すると、2回目のf.write(str2)を実行した段階で、最初の文(NECは人工知能を利用して新しい薬の開発に取り組んでいる。)が消されて上書きされてしまう。しかし、追記モードであれば、上記のような実行結果が得られます。

というわけで、たっぷりファイルへの書き込みを学んだところで、次は、ファイルからの読み込みを学びましょう。

Python3におけるファイルからの読み込み

ファイルを読み込むには読み込みモード(r)を使います。

プログラムの前半では、readme.txtというファイルを作成し、そこに「こんにちは!」と書き込んでいます。

プログラムの後半では、読み込みモードで、readme.txtと接続し、readline()メソッドでファイルの先頭から1行だけ読み込んでいます。readline()メソッドは読み込んだ文字列を返します。readline()メソッドの戻り値をreadmeという変数に格納し、それをprint()しています。

実行結果は、「こんにちは!」と画面に表示される形になりますね。

では、複数行のファイルを読み込むにはどうすればいいでしょうか。readline()では1行しか読み込むことができませんね。しかしPythonは優れたプログラミング言語なので、ちゃんと便利なメソッドを用意してくれています。それが、readlines()メソッドです。readlines()は複数行を読み込んだ上で、その結果をリスト型で返してくれます。

例えば、以下のようなテキストファイルがあったとします。

このテキストファイルをreadlines()で読み込むと以下のようなリストが返ってきます。

[‘こんにちは!\n’, ‘今日は晴天ですね。\n’, ‘絶好のピクニック日和ですね。’]

ここで注意して欲しいのは、改行コード(\nまたは¥n)はテキストファイル上では目に見えませんが、これをプログラムに読み込むと、改行コードが明示されるという点です。

この改行コード。プログラムからprint()で文字列を出力するときに邪魔くさいですよね。しかしPythonは優秀なので、改行コードなどの制御文字や、文字列の前後にある半角の空白文字など、邪魔臭いものを簡単に取り除いてくれるメソッドを用意してくれています。それがstrip()メソッドです。

例えば、以下のように書くと、改行コードを取り除いてくれます。

IDLEで試すとこんな具合です。

strip

では、以上の知識を活用して複数行のテキストファイルを読み込んで、その結果をprint()で画面に表示するサンプルプログラムを見てみましょう。

sentence_list = r.readlines()の戻り値はリスト型なので内部的には以下のようになっている。

[‘人間と動物との違いは何か。\n’, ‘言葉があるかないかだという。\n’, ‘しかしイルカ等は言葉を話すともいう。’]

上記のリストに対して、for 変数 in データ:を用いて、1つ1つの要素を取り出し、全ての要素にstrip()をかけることで、改行コード等の邪魔なものを取り除いているわけですね。

<実行結果>

さて!

念のためfor-in文の復習をしておきますかね。不要な方は読み飛ばして下さいませ。

for food in food_list:

と書くことで、food_listの各要素の中身を1つ1つfoodに取り出して、リストの要素数回、反復するわけですね。

foodの中身は、’から揚げ’⇒’ハンバーグ’⇒’ステーキ’⇒…ってな具合に、一周するごとに変化していくのでしたね。

さらに詳しくfor文の復習をしたい方は「Python3超入門講座【第7回】」をご覧いただければと存じます。

しかし!!!実はこんなめんどうなことをしなくてももっと簡単に複数行のテキストファイルを読み込む方法があるです!

サンプルプログラムを見ると分かりやすいと思いますです!

なんと実はたったこれだけのコードで、テキストファイルの中身を読み込んで、全て表示できるのであります!

for-in文恐るべしですね!

<実行結果>

例外処理

開いたファイルオブジェクトを確実にクローズするためには例外処理(try~finally)を利用するかwith構文を使う必要があります。

try~finallyを使ったファイル読み書きのサンプルプログラム

readlines()メソッドはテキストファイルの1行を1要素とするリストを返します。

リストの要素を1行ずつ画面に表示する際、改行コードが邪魔になるので、strip()関数で取り除いています。

with構文を使ったファイル読み書きのサンプルプログラム

with構文を利用する場合、明示的にclose()を書かなくても、自動的にクローズされます。

【with構文の書式】

with open() as 変数名:
処理

f = open()と書くと変数fにファイルオブジェクトが格納されるのと同じように、with open() as 変数名と書くと、変数名の部分にファイルオブジェクトが格納されます。

close()メソッドwith構文が終わるタイミングで自動的に呼び出されるので書く必要はありません。

 

これでPython3超入門講座【第13回】「ファイル入出力」を終わりにしたいと思います。

 

Python3超入門講座トップへ戻る

 

【関連記事】

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA