7日目のゴール
7日目のテーマは
「ファイル読み込みアプリの“全体像”を理解し、自分の言葉で説明できるようになること」 です。
ここまでであなたは、
ファイル全体を読む
1行ずつ読む
先頭・末尾だけ読む
検索する
行の一部だけ抜き出す
ページごとに表示する
という、ファイルビューアに必要な基礎をすべて習得しています。
7日目では、これらを「バラバラの技術」ではなく
ひとつのアプリとして統合して理解する ことを目指します。
ファイル読み込みの本質を言葉で整理する
read は「ファイルの内容をプログラムの世界に持ってくる入口」
ファイル読み込みの本質は、たったこれだけです。
「ファイルの中身を、Python が扱える形(文字列やリスト)に変換する」
そのための道具が open と read です。
with open(filename, "r", encoding="utf-8") as f:
lines = f.readlines()
Pythonこの一行で、
ファイルを開く
中身を全部読み込む
行のリストとして保持する
という処理が完了します。
7日目で大事なのは、
「読み込みは一度だけでよい」
「その後の処理は、行のリストに対して行う」
という構造を理解することです。
読み込みと表示を完全に分離する
読み込みは load_lines、表示は show_xxx
昨日までに作った構造をもう一度整理します。
def load_lines(filename):
with open(filename, "r", encoding="utf-8") as f:
return f.readlines()
Pythonこの関数は、
「ファイルを読む」という役割だけを担当します。
一方で、表示は別の関数が担当します。
def show_all(lines):
for index, line in enumerate(lines, start=1):
print(f"{index:4}: {line.strip()}")
Pythonこの分離ができていると、
全部表示
検索して表示
ページごとに表示
行の一部だけ表示
など、どんな表示方法でも
読み込みは共通で使い回せる ようになります。
7日目版:統合ファイルビューアの完成形
これまでの機能をひとつのアプリにまとめる
ここでは、
「全部表示」「検索」「ページ表示」
の3つをまとめた完成版を作ります。
def load_lines(filename):
with open(filename, "r", encoding="utf-8") as f:
return f.readlines()
def show_all(lines):
if not lines:
print("ファイルは存在しますが、中身は空です。")
return
for index, line in enumerate(lines, start=1):
print(f"{index:4}: {line.strip()}")
def search_lines(lines, keyword):
found = False
for index, line in enumerate(lines, start=1):
if keyword.lower() in line.lower():
print(f"{index:4}: {line.strip()}")
found = True
if not found:
print(f"「{keyword}」を含む行は見つかりませんでした。")
def show_paged(lines, page_size=10):
if not lines:
print("ファイルは存在しますが、中身は空です。")
return
total = len(lines)
current = 0
while current < total:
end = min(current + page_size, total)
for index in range(current, end):
print(f"{index + 1:4}: {lines[index].strip()}")
print(f"--- {current + 1} 行目から {end} 行目まで表示(全 {total} 行)---")
cmd = input("続けますか? (Enter: 続ける / q: 終了): ").strip().lower()
if cmd == "q":
break
current = end
def main():
print("ファイル読み込みアプリ(7日目)")
filename = input("読み込むファイル名を入力してください: ")
try:
lines = load_lines(filename)
except FileNotFoundError:
print(f"{filename} が見つかりません。")
return
print("表示方法を選んでください。")
print("1: 全部表示")
print("2: キーワード検索")
print("3: ページごとに表示(10行ずつ)")
choice = input("番号: ")
if choice == "1":
show_all(lines)
elif choice == "2":
keyword = input("検索キーワード: ")
search_lines(lines, keyword)
elif choice == "3":
show_paged(lines, page_size=10)
else:
print("不正な入力です。1〜3 を選んでください。")
main()
Python関数ごとの役割を「一文で」説明してみる
自分の言葉で説明できれば、理解は完成している
load_lines
「ファイルを開き、全行をリストとして読み込んで返す。」
show_all
「行のリストを、行番号付きで全部表示する。」
search_lines
「行のリストから、キーワードを含む行だけを抜き出して表示する。」
show_paged
「行のリストを、指定した行数ごとに区切ってページ表示する。」
main
「ファイル名を入力してもらい、読み込み後に表示方法を選ばせる。」
ここまで言えれば、
ファイル読み込みアプリの構造を完全に理解できています。
「どこを変えれば何が変わるか」を確認する
変更ポイントを自分で見つけられるようになる
ページサイズを 20 行にしたい
→ show_paged の page_size を 20 にする
検索を「完全一致」にしたい
→ keyword.lower() in line.lower() を == に変える
行番号を表示したくない
→ f”{index:4}:” を削除する
読み込み時に空行を無視したい
→ load_lines の中で if line.strip(): を使ってフィルタする
こうやって、
「どこを変えればどう動きが変わるか」
が自分で分かるようになっていれば、
もう“設計できる人”です。
7日目のまとめ:あなたが身につけた力
この 7 日間であなたは、
read を使ってファイルを読み込む
行ごとに処理する
検索・抽出・ページ表示などの応用ができる
読み込みと表示を分離して設計できる
コードを日本語で説明できる
というところまで来ています。
これはもう、
「自分の目的に合わせてファイルを読み込むアプリを作れるレベル」
です。
ここから先は、
CSV ビューア、ログ解析ツール、設定ファイル読み込みなど、
実用的なアプリにいくらでも発展させられます。
あなたはもう、
ファイル読み込みの“基礎”を完全に手に入れました。

