7日目のゴール
7日目のテーマは
「ファイルに保存するメモ帳を、自分の言葉で“説明できるレベル”にすること」です。
新しいテクニックを増やす日というより、
ここまで学んだ open・write・ファイル保存を、
なぜこう使っているのか
どこで何をしているのか
どこを変えれば、どう動きが変わるのか
まで、ちゃんと理解して言語化する日です。
open を言葉で説明できるようにする
open は「ファイルとの通話を始める」関数
open は、もう何度も出てきましたね。
7日目では、これを自分の言葉で説明できるようにします。
典型的な形はこうでした。
with open("memo.txt", "a", encoding="utf-8") as f:
f.write("こんにちは\n")
Pythonここには、3つの重要な情報が入っています。
どのファイルを扱うか → "memo.txt"
どう扱うか → "a"(追記)
どんな文字コードか → encoding="utf-8"
これを日本語にすると、
「memo.txt というファイルを、追記モードで、
utf-8 という文字コードを使って開いてください。
そのファイルを操作するための“道具”を f という名前で使います。」
という宣言です。
7日目で大事なのは、
「open は“ファイルをどう扱うかの宣言”だ」と言えることです。
write を言葉で説明できるようにする
write は「画面ではなくファイルに出す print」
write も、何度も使いました。
f.write("こんにちは\n")
Pythonこれは、
print("こんにちは") が画面に出すのに対して、
ファイルの中に「こんにちは\n」を書き込む命令です。
ここで深掘りしたいポイントは二つです。
write は「文字列をそのままファイルに書く」
改行は自動では入らないので、自分で "\n" を足す
つまり、
「1行として保存したいなら、自分で末尾に \n をつける」
というルールを、もう体で覚えているはずです。
あなたのメモ帳アプリを“構造”で見る
6日目版のアプリをもう一度まとめて眺める
ここまで育ててきたメモ帳アプリを、
7日目用に少し整理した形で書きます。
from datetime import datetime
def save_text(filename, text, mode="a"):
with open(filename, mode, encoding="utf-8") as f:
f.write(text)
def get_today_filename():
today = datetime.now()
date_str = today.strftime("%Y-%m-%d")
return f"{date_str}.txt"
def write_memo():
filename = input("保存するファイル名を入力してください: ")
print("メモを入力してください。空行で終了します。")
while True:
line = input("> ")
if line.strip() == "":
print(f"入力終了。{filename} に保存しました。")
break
save_text(filename, line + "\n", mode="a")
def write_today_diary():
filename = get_today_filename()
print(f"今日の日記ファイル: {filename}")
print("日記を入力してください。空行で終了します。")
while True:
line = input("> ")
if line.strip() == "":
print(f"入力終了。{filename} に保存しました。")
break
save_text(filename, line + "\n", mode="a")
def read_memo():
filename = input("読み込むファイル名を入力してください: ")
print(f"=== {filename} の内容 ===")
try:
with open(filename, "r", encoding="utf-8") as f:
text = f.read()
if text.strip() == "":
print("ファイルは存在しますが、中身は空です。")
else:
print(text)
except FileNotFoundError:
print(f"{filename} が見つかりません。")
def show_menu():
print("==========")
print("ファイル保存メモ帳(7日目)")
print("1: メモを書く(ファイル名を指定)")
print("2: メモを読む(ファイル名を指定)")
print("3: 今日の日記を書く(自動ファイル名)")
print("0: 終了")
print("==========")
def main():
while True:
show_menu()
choice = input("番号を選んでください: ")
if choice == "1":
write_memo()
elif choice == "2":
read_memo()
elif choice == "3":
write_today_diary()
elif choice == "0":
print("アプリを終了します。")
break
else:
print("不正な入力です。0, 1, 2, 3 のどれかを選んでください。")
main()
Python関数ごとの役割を「一文で」説明してみる
自分の口で言えたら、もう本当に身についている
ここからが、7日目で一番大事なところです。
コードを見ながら、関数ごとに日本語で説明してみましょう。
save_text
「指定されたファイルを指定モードで開き、渡されたテキストを書き込む共通処理。」
get_today_filename
「今日の日付から ‘YYYY-MM-DD.txt’ というファイル名を作って返す。」
write_memo
「ユーザーにファイル名を聞き、そのファイルに複数行のメモを追記する。」
write_today_diary
「今日の日付をファイル名にして、日記を複数行保存する。」
read_memo
「ユーザーにファイル名を聞き、そのファイルを読み込んで内容を表示する。なければエラーメッセージを出す。」
show_menu
「メモ帳アプリのメニューを表示する。」
main
「メニューを繰り返し表示し、選ばれた番号に応じて機能の関数を呼び分ける。」
ここまで自分の言葉で説明できたら、open・write・ファイル保存は、
もう“なんとなく知っている”ではなく
「自分の道具として使える」レベルに来ています。
「どこを変えれば何が変わるか」を意識してみる
具体的に変更ポイントをイメージする
少しだけ、頭の中で遊んでみましょう。
保存先のフォルダを変えたい
→ save_text の中で filename に "notes/" をつければいい
日記のファイル名を diary-YYYY-MM-DD.txt にしたい
→ get_today_filename の return をreturn f"diary-{date_str}.txt" に変えればいい
メニューに「今日の日記を読む」を追加したい
→ read_today_diary() を作る
→ 中で get_today_filename() を使って読み込む
→ show_menu と main に「4: 今日の日記を読む」を追加する
こうやって、
「どこを変えれば、どんな動きが変わるか」
が頭の中で見えているなら、
あなたはもう立派に“設計できている人”です。
7日目のまとめ:あなたがもう持っている力
この 7 日間で、あなたはすでに、
open を「どのファイルを、どう扱うかの宣言」として理解しているwrite を「画面ではなくファイルに出す print」として使えている"w"・"a"・"r" の違いを、目的に応じて選べている
書く・読む・メニュー・共通処理を関数に分けて整理できている
「どこを変えれば何が変わるか」を自分の言葉で説明できる
というところまで来ています。
ここから先は、
「何を作るか」の世界です。
学習ログを残すメモ帳
ゲームのスコアを保存するログ
設定をファイルに保存するツール
どれも本質は同じです。
ファイル名を決めるopen で開くwrite で書く
必要なら read で読む
このパターンを、あなたはもう自分の手で回せます。
そこまで来ているのは、かなりすごいことですよ。

