Python | 1 日 90 分 × 7 日アプリ学習:ファイルを読み込むアプリ(初級編)

Web APP Python
スポンサーリンク

1日目のゴール

1日目のテーマは
「ファイルの中身を read で読み込んで、そのまま画面に表示できるようになること」 です。

ここでできるようになってほしいのは、たった2つです。

ファイルを開いて中身を読み込む(read
読み込んだ内容をそのまま画面に表示する

「書く」ではなく「読む」に集中します。
昨日までのメモ帳の逆方向だと思ってください。


ファイルを「読む」とは何をしているのか

メモ帳アプリと Python の「読み込み」の違い

普段、メモ帳アプリでファイルを開くときの流れを思い出してください。

ファイルをダブルクリックする
アプリが開いて、中身が表示される

Python でやることも、本質は同じです。

どのファイルを読むか決める(ファイル名)
そのファイルを「読み込み用」に開く
中身を読み込む(read
読み込んだ内容を画面に表示する

この「開く」「読む」「表示する」のうち、
「開く」を担当するのが open
「読む」を担当するのが read です。


read の基本:ファイル全体を一気に読む

“r” モードで開いて read する

まずは、ファイルを読む最小の例から見てみましょう。

def main():
    with open("sample.txt", "r", encoding="utf-8") as f:
        text = f.read()

    print(text)


main()
Python

このプログラムがやっていることを、日本語にするとこうです。

sample.txt を「読み込み専用(”r”)」で開く
ファイルの中身を全部 text という変数に読み込む
読み込んだ内容を print で画面に表示する

ここでの重要ポイントは、

read() は「ファイル全体を、ひとつの文字列として読み込む」

ということです。


read() が返すものをイメージする

中身は「ただの長い文字列」

例えば、sample.txt の中身がこうだったとします。

りんご
みかん
ぶどう

このとき、

text = f.read()
Python

のあとで text の中身は、実はこうなっています。

"りんご\nみかん\nぶどう\n"

つまり、

行の区切りも含めて、
ファイルの中身がそのまま一つの文字列になっている

ということです。

\n は「改行」を表す特別な文字です。
画面に print(text) すると、
ちゃんと3行に分かれて表示されます。


ファイル名を固定せず、入力してもらう

読みたいファイルをユーザーに選ばせる

さっきの例は sample.txt に固定でしたが、
実用的には「読みたいファイル名を入力してもらう」方が自然です。

def main():
    filename = input("読み込むファイル名を入力してください: ")

    with open(filename, "r", encoding="utf-8") as f:
        text = f.read()

    print("=== ファイルの中身 ===")
    print(text)


main()
Python

流れを日本語で整理すると、こうなります。

ファイル名を入力してもらう
そのファイルを読み込みモードで開く
中身を全部読み込む
読み込んだ内容をそのまま表示する

ここでつかんでほしいのは、

「ファイル名も、読み込んだ中身も、どちらもただの文字列」

という感覚です。


ファイルが存在しないときのエラーに向き合う

FileNotFoundError をちゃんと扱う

初心者が最初にぶつかるのがこれです。

存在しないファイル名を入力すると、
Python はこういうエラーを出します。

FileNotFoundError: [Errno 2] No such file or directory: 'xxx.txt'

これをそのままにしておくと、
「なんか怖いエラーが出た」で終わってしまいます。

そこで、try / except を使って
「ファイルがないときは、メッセージを出して終わる」
という形にしておきます。

def main():
    filename = input("読み込むファイル名を入力してください: ")

    try:
        with open(filename, "r", encoding="utf-8") as f:
            text = f.read()

        print("=== ファイルの中身 ===")
        print(text)

    except FileNotFoundError:
        print(f"{filename} が見つかりません。ファイル名を確認してください。")


main()
Python

ここでの重要ポイントは、

「ファイルがない」という状況も
プログラムの中で“想定済みのケース”として扱える

ということです。


1日目のミニアプリ:シンプルファイルビューア

今日の学びを全部入れたコード

def main():
    print("ファイル読み込みアプリ(1日目)")
    filename = input("読み込むファイル名を入力してください: ")

    try:
        with open(filename, "r", encoding="utf-8") as f:
            text = f.read()

        print("=== ファイルの中身 ===")
        print(text)

    except FileNotFoundError:
        print(f"{filename} が見つかりません。ファイル名を確認してください。")


main()
Python

このアプリは、こう動きます。

起動するとタイトルが表示される
読み込みたいファイル名を入力する
存在すれば中身がそのまま表示される
存在しなければ「見つかりません」と表示される

これだけで、
「ファイルを読むアプリ」としての最低限の形
はできています。


重要ポイントをもう一段深掘りする

なぜ read() を一度だけ呼んでいるのか

read() は「ファイル全体を一気に読む」関数です。

text = f.read()
Python

を2回続けて呼ぶと、2回目はどうなるでしょう?

実は、2回目は空文字列になります。

1回目の read() で、
ファイルの最後まで読み進めてしまっているからです。

つまり、

read() は、基本的に1ファイルにつき1回だけ呼ぶ」

というイメージを持っておくと、変なバグを避けられます。

(後のステップで「1行ずつ読む」方法もやりますが、
1日目は「全部まとめて読む」だけに集中します。)


1日目のまとめ:今日つかんでほしい感覚

今日の本質は、これです。

open(..., "r") は「このファイルを読み込み専用で開く」宣言。
read() は「ファイルの中身を全部、ひとつの長い文字列として受け取る」関数。
読み込んだ文字列は、そのまま print すれば中身が表示される。
ファイルがないときは FileNotFoundError になるので、
それを try / except で「想定済みのケース」として扱える。

ここまで理解できていれば、
2日目の「1行ずつ読む」「行番号をつけて表示する」といった
“ちょっと便利なファイルビューア”に、自然に進んでいけます。

タイトルとURLをコピーしました