withでファイルをきれいに読み書きし、JSONをやり取りし、コードをインポート可能なモジュールへと整理しましょう。
このレッスンを Kodokon で開くファイルの読み書きは、実際のプログラムの日々の糧です。エクスポート、ログ、設定などがそうです。withキーワードはファイルを開き、ブロックの途中でエラーが起きたとしても必ず閉じることを保証します。ファイルを開く実務的なやり方はこれだけです。これなしでは、close()を忘れるとデータが壊れたり、システムの資源を使い果たしたりしかねません。
lines = ["alpha", "beta", "gamma"]
with open("notes.txt", "w", encoding="utf-8") as f:
for line in lines:
f.write(line + "\n")
with open("notes.txt", encoding="utf-8") as f:
content = f.read()
print(content)構造化されたデータには、自分でフォーマットを考え出してはいけません。標準ライブラリのjsonモジュールが、辞書やリストをテキストに変換し、また元に戻します。プログラム、API、設定ファイルのあいだで使われる、世界共通のやり取りの形式です。
import json
config = {"debug": True, "retries": 3}
with open("config.json", "w", encoding="utf-8") as f:
json.dump(config, f, indent=2)
with open("config.json", encoding="utf-8") as f:
loaded = json.load(f)
print(loaded["retries"]) # 3モジュールとは、単に一つの.pyファイルのことです。import billingはbilling.pyを読み込み、その中身を一度だけ実行します。責務ごとにコードを整理しましょう。請求のためのモジュール、保存のためのモジュール、というふうにです。そしてimport文はファイルの先頭にまとめておきましょう。if __name__ == "__main__"というテストは二つの状況を区別します。直接実行されたとき、ファイルはこのブロックを実行します。インポートされたときは、それを無視します。
def compute_total(prices):
return round(sum(prices), 2)
def main():
print(compute_total([9.99, 4.5, 20.0]))
if __name__ == "__main__":
main()python billing.py