【入門者向け】Pythonの入出力の実装|Python入門 #5

f:id:lib-arts:20190804170008p:plain

#1ではPythonを用いたFizzBuzzのコーディングについてまとめました。

入門者の方に読んでみていただいたところ、少し難しかったようなので、#2以降では#1で触れた基本文法をそれぞれもう少し丁寧に解説を行なっていきます。基本的には下記のPythonのドキュメントのチュートリアルなどを元にして解説していきます。

Python チュートリアル — Python 3.7.4 ドキュメント

#2ではPythonにおける四則演算・文字列について、#3ではリスト・タプル・辞書について、#4ではPythonの制御構文について取り扱いました。

【入門者向け】Pythonの基礎文法① 四則演算・文字列|Python入門 #2 - lib-arts’s diary

【入門者向け】Pythonの基礎文法② リスト・タプル・辞書|Python入門 #3 - lib-arts’s diary

【入門者向け】Pythonの基礎文法③ 制御構文(if、for)|Python入門 #4 - lib-arts’s diary

#5ではSection7を中心にPythonの入出力について取り扱います。

7. 入力と出力 — Python 3.7.4 ドキュメント

以下目次になります。
1. 出力を見やすくフォーマットする(7.1)
2. ファイルを読み書きする(7.2)
3. まとめ

 

1. 出力を見やすくフォーマットする(7.1)
1節ではSection7.1をベースにまとめていきます。そのまままとめると入門向けとしては難しい内容となるので、随時必要箇所の抜粋などの取捨選択や補足などを加えてまとめます。
・文字列リテラルやstr.format()
文字列の中身を変更したい際などに変数を用いて中身を制御するにあたって、文字列リテラルやstr.format()が便利です。まずは下記を実行してみましょう。

year = 2016
event = 'Referendum'

print(f'Results of the {year} {event}')
print('Results of the {year} {event}')
print(f'Results of the year {event}')

実行結果は下記になります。

f:id:lib-arts:20190820185122p:plain

{}で囲む&出力時にf''の中に文字列を入れることで変数として値を与えることができます。ここでfをつけなかったり{}をつけなかったりすることで値を制御することが可能に

なります。
また、str.format()のように実行することで同様の内容を実現することができます。下記が実行サンプルになります。

yes_votes = 42_572_654
no_votes = 43_132_495
percentage = yes_votes / (yes_votes + no_votes)

print('{:-9} YES votes {:2.2%}'.format(yes_votes, percentage))

実行すると下記のような出力が得られます。

f:id:lib-arts:20190820185528p:plain

format文の中で用いる変数を指定することで、値を渡すことができます。
細かいオプションについてはSection7.1にまとまっているのでだいたいこのようなことができると把握したところで1節はここまでとします。


2. ファイルを読み書きする(7.2)
2節ではファイルの読み書きを見ていきます。ドキュメントの記述はプログラミングの経験がなければ若干わかりづらいですが、所々記述の抜粋と補足をまとめていきます。

f:id:lib-arts:20190820190206p:plain

まず冒頭部で上記のように説明されていますが、openメソッドを用いることで外部fileに関してのオブジェクトを生成します。メソッドにはファイルの名前(fileneme)と編集モード(mode)の二つの引数を与え、どのファイルをどういう形式で開くかについて指定します。modeについては書き込みなら'w'、読み出しなら'r'を用います。ここまでの内容を詳しく理解するにあたってはオブジェクト指向の理解が必要なので、後日記事でオブジェクト指向についてまとめます。

上記は若干難しいですが、システム設計に関連してオブジェクト指向についてまとめていますので参考になればと思います。
少し話がオブジェクト指向にそれてしまいましたので、openメソッドに戻します。

f:id:lib-arts:20190820191050p:plain

openメソッドは処理中に例外が発生した際にもファイルを閉じれるようにwith構文と一緒に用いると良いです。with構文では中での処理がなんらかの形で終了した際にファイルが使っていたシステムリソースを同時に解放してくれます。なので、openメソッドはwith構文と併用して利用すると覚えておくと良いです。
難しそうな話が続いたので、実際に動かしてみます。まずは下記を動かしてみましょう。

with open('sample.txt', 'w') as f:
    f.write('This is a test.')

上記を動作させると実行ディレクトリ(フォルダ)と同じディレクトリ内に外部ファイルとしてsample.txtを作成し、その中に"This is a test."と出力されています。

f:id:lib-arts:20190820192202p:plain

sample.txtの中を実際に見てみると上記のように"This is a test."とあるのが確認できます。
次に読み出しを行います。下記を実行してみてください。

with open('sample.txt', 'r') as f:
    print(f.read())

実行結果は下記になり、書き込みを行った"This is a test."が読み出せていることが確認できます。

f:id:lib-arts:20190820192541p:plain


3. まとめ
#5では出力を見やすくするための機能の紹介やファイルの読み書きについてご紹介しました。
#6以降では今回オブジェクト指向が出てきたので関数やクラスについて解説します。