6日目のゴール
6日目のテーマは
「ファイル保存メモ帳を“ちょっと賢くする”こと」です。
ここまでであなたは、
ファイルに書ける
追記できる
読み込める
ファイル名を自分で指定できる
というところまで来ています。
今日はここから一歩進んで、
よく使う「保存処理」を関数として共通化する
日付入りのファイル名を自動でつけてみるopen と write を「部品」として意識して組み立てる
ここを目指します。
open と write を「共通の部品」にする発想
毎回同じようなコードを書いていないかを疑う
5日目までのコードを思い出してみてください。
メモを書くときも
メモを読むときも
毎回こういう形が出てきていました。
with open(filename, "a", encoding="utf-8") as f:
f.write(何か)
with open(filename, "r", encoding="utf-8") as f:
text = f.read()
Pythonこれ自体は正しいのですが、
「ファイルにテキストを書き込む」という処理は
どこでも同じパターンです。
そこで今日は、
「ファイルにテキストを書き込む関数」
を一つ用意して、そこにまとめてしまいます。
「テキストをファイルに保存する関数」を作る
save_text(filename, text) という“道具”を用意する
まずは、シンプルな保存関数を作ります。
def save_text(filename, text, mode="a"):
with open(filename, mode, encoding="utf-8") as f:
f.write(text)
Pythonこの関数は、日本語で言うとこうです。
「指定されたファイルを、指定されたモードで開き、
渡されたテキストを書き込む」
ここでの重要ポイントは二つあります。
mode を引数にしているので、”a” でも “w” でも使えるopen と write のセットを一か所にまとめている
これで、他の場所ではopen と write の細かい書き方を意識せずに済みます。
save_text を使ってメモ保存をシンプルに書き直す
行ごとの保存を「1行ずつ save_text で呼ぶ」
複数行メモを書く関数を、こう書き換えられます。
def write_memo():
filename = input("保存するファイル名を入力してください: ")
print("メモを入力してください。空行で終了します。")
while True:
line = input("> ")
if line.strip() == "":
print(f"入力終了。{filename} に保存しました。")
break
save_text(filename, line + "\n", mode="a")
Pythonここでの深掘りポイントは、
with open(...) が write_memo から消えている
「どのファイルに」「何を書き込むか」だけを考えればよくなっている
ということです。
open と write の“細かい操作”は
save_text に押し込めてしまい、
上のレベルの関数では「何をしたいか」だけを書く。
これは、プログラミングを続けるうえで
とても大事な感覚です。
日付入りファイル名を自動でつけてみる
「毎日の日記ファイル」をイメージする
ここで、少しだけ実用寄りの話をします。
例えば、
「今日の日付をファイル名にした日記」
を作りたいとします。
2026-04-08.txt
2026-04-09.txt
のようなファイル名です。
Python では、日付を扱うためにdatetime というモジュールを使います。
from datetime import datetime
def get_today_filename():
today = datetime.now()
date_str = today.strftime("%Y-%m-%d")
return f"{date_str}.txt"
Pythonこの関数は、
今日の日付を “2026-04-08” のような文字列にして
それに “.txt” をつけて返す
という役割です。
日付ファイルに自動保存するメモ機能
ファイル名を聞かずに「今日の日記」として保存する
さっきの get_today_filename を使って、
「今日の日記を書く」機能を作ってみます。
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")
Pythonここでの重要ポイントは、
ユーザーにファイル名を聞いていない
「今日」という概念をプログラム側が持っている
ということです。
これだけで、
「日付ごとに自動でファイルが分かれる日記アプリ」
になります。
メニューに「今日の日記を書く」を追加する
機能が増えても main は“流れだけ”にする
ここまでの機能をメニューにまとめます。
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("ファイル保存メモ帳(6日目)")
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役割を日本語で言い切ってみる
関数ごとの「一文説明」
save_text
指定されたファイルを指定モードで開き、渡されたテキストを書き込む共通関数。
get_today_filename
今日の日付から「YYYY-MM-DD.txt」というファイル名を作って返す。
write_memo
ユーザーが指定したファイル名に、複数行のメモを追記する。
write_today_diary
今日の日付をファイル名にして、日記を複数行保存する。
read_memo
ユーザーが指定したファイルを読み込み、内容を表示する。
show_menu
メモ帳アプリのメニューを表示する。
main
メニューを繰り返し表示し、選ばれた番号に応じて機能を呼び分ける。
ここまで日本語で説明できていれば、open と write を「ただの命令」ではなく
「アプリの中の部品」として扱えている状態です。
6日目のまとめ:今日つかんでほしい感覚
今日の本質はこれです。
open と write は、
「ファイルにテキストを書き込む」という一つのまとまりとして
関数に閉じ込めてしまえる。
ファイル名は、
ユーザーに入力してもらってもいいし、
プログラム側で日付などから自動生成してもいい。
メニューは、
「どの機能(どの関数)を呼ぶか」を選ぶ“入り口の一覧”。
ここまで来ているあなたなら、
7日目に「自分のメモ帳アプリを言葉で説明して、
どこをどう変えればどう拡張できるか」を
自分の頭で考えられるところまで行けます。

