基礎から学ぶPython入門 90日コース | Python基礎 - Day 12:ファイル操作

Python 90日で身につけるPython
スポンサーリンク
スポンサーリンク

Day 12:ファイル操作の基本を押さえる

Day 12では、「ファイル操作」をテーマに、open()、読み込み・書き込み・追記、with、文字コードをステップバイステップで学んでいきます。 ここからは、プログラムが「画面だけでなく、ファイルとも会話できるようになる」段階です。ログ保存や設定ファイルの読み書きなど、実用的な世界に一気に近づきます。

open() の基本 ― ファイルを「開く」ということ

Pythonでファイルを扱うときは、まず open() 関数を使います。 open() は、「ファイルを開いて、そのファイルを操作するためのオブジェクトを返す」関数です。

# ファイルを開く基本形
f = open("example.txt", "r", encoding="utf-8")  # "r" は読み込みモード
Python

主な引数は次の通りです。

  • ファイル名: "example.txt" のように文字列で指定します。
  • モード: "r"(読み込み)、"w"(書き込み)、"a"(追記)など。
  • encoding: "utf-8" などの文字コード。日本語を扱うときはほぼ必須です。

open() が返す f は「ファイルオブジェクト」であり、 このオブジェクトに対して read()write() を呼び出すことで、実際の読み書きが行われます。

ファイルの読み込み ― read() と行単位の読み込み

まずは、「テキストファイルの中身を読み込んで表示する」基本的な例を見ていきます。

# ファイルの読み込み例(基本形)

f = open("example.txt", "r", encoding="utf-8")  # 読み込みモードで開く

content = f.read()  # ファイル全体を1つの文字列として読み込みます
print("ファイルの中身:")
print(content)

f.close()  # ファイルを閉じます(後片付け)
Python

ここでのポイントは次の通りです。

  • "r" モードは「読み込み専用」です。
  • f.read() は「ファイル全体」を1つの文字列として読み込みます。
  • 読み終わったら f.close() で必ずファイルを閉じます。 閉じ忘れは、リソースの無駄遣いや予期しない不具合の原因になります。

行単位で読み込みたい場合は、次のように書けます。

f = open("example.txt", "r", encoding="utf-8")

for line in f:  # ファイルオブジェクトは行ごとにループできます
    print("1行:", line.strip())  # strip()で改行を取り除いて表示

f.close()
Python

このように、「ファイルを開く → 読む → 閉じる」が読み込みの基本パターンです。

ファイルへの書き込み ― write() と上書きモード

次に、「テキストファイルに文字列を書き込む」例を見ていきます。

# ファイルへの書き込み例(上書き)

f = open("output.txt", "w", encoding="utf-8")  # "w" は書き込みモード(上書き)

f.write("こんにちは、Pythonファイル操作入門です。\n")
f.write("このファイルはwrite()で書き込まれました。\n")

f.close()  # 書き込みが終わったら必ず閉じます
Python

ここでのポイントは次の通りです。

  • "w" モードは「書き込み専用」であり、既存のファイルがあれば中身を上書きします。
  • f.write() は「文字列をそのままファイルに書き込む」メソッドです。
  • 改行が必要な場合は、文字列の中に \n を自分で入れます。
  • 書き込み後は必ず f.close() でファイルを閉じます。

上書きモードは強力ですが、「うっかり既存のファイルを消してしまう」危険もあるので、 重要なファイルに対しては慎重に使う必要があります。

追記モード ― 既存ファイルの末尾に追加する

「ログを追加したい」「日付ごとに行を増やしたい」といった場面では、 上書きではなく「追記」が必要になります。ここで "a" モードを使います。

# ファイルへの追記例

f = open("log.txt", "a", encoding="utf-8")  # "a" は追記モード

f.write("新しいログ行です。\n")
f.write("さらにもう1行追加します。\n")

f.close()
Python

ポイントは次の通りです。

  • "a" モードは「追記専用」であり、既存の内容はそのまま残し、末尾に新しい内容を追加します。
  • ログファイルや履歴ファイルなど、「過去の記録を残しつつ新しい行を足していく」用途に向いています。

書き込みと追記の違いを意識しておくことは、データを安全に扱ううえで非常に重要です。

with 文で「開いたら必ず閉じる」を自動化する

open()close() を毎回書くのは少し面倒ですし、 エラーが起きたときに close() が呼ばれないリスクもあります。

そこで登場するのが with 文です。

# with を使った読み込み

with open("example.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print("ファイルの中身:")
    print(content)
# ここを抜けた時点で、自動的に f.close() が呼ばれます
Python
# with を使った書き込み

with open("output.txt", "w", encoding="utf-8") as f:
    f.write("with文を使うと、後片付けが自動になります。\n")
    f.write("close()を書き忘れる心配が減ります。\n")
# ここを抜けた時点で、自動的に f.close() が呼ばれます
Python

with のポイントは次の通りです。

  • with open(...) as f: の形で書くと、「ブロックを抜けたときに自動で close() してくれる」仕組みになります。
  • 例外が発生しても、with ブロックを抜けるタイミングで後片付けが行われます。
  • ファイル操作では、基本的に with を使う書き方が推奨されます。

セキュリティや信頼性の観点でも、「リソースを確実に解放する」ことは非常に重要です。 with は、そのための強力な味方です。

文字コード(encoding)を意識する

日本語を含むテキストを扱うときは、「文字コード」を意識する必要があります。 Pythonでは、open()encoding 引数で文字コードを指定します。

# UTF-8で読み書きする例

with open("japanese.txt", "w", encoding="utf-8") as f:
    f.write("こんにちは、Pythonファイル操作入門です。\n")
    f.write("日本語を安全に扱うには文字コードの指定が大切です。\n")

with open("japanese.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print("読み込んだ内容:")
    print(content)
Python

ポイントは次の通りです。

  • "utf-8" は、現在もっとも一般的な文字コードであり、日本語も安全に扱えます。
  • 書き込みと読み込みで同じ文字コードを使うことが重要です。
  • 文字コードを指定しないと、環境によっては意図しない文字化けが起きることがあります。

ファイル操作では、「encodingを必ず明示する」習慣をつけておくと安心です。

ファイル操作のミニテンプレート(読み書き+追記)

最後に、読み込み・書き込み・追記をまとめて体験できるミニテンプレートを示します。

# Day 12:ファイル操作ミニテンプレート

filename = "notes.txt"

# 1. 書き込み(上書き)
with open(filename, "w", encoding="utf-8") as f:
    f.write("これはファイル操作の練習用メモです。\n")
    f.write("最初の内容を書き込んでいます。\n")

# 2. 追記
with open(filename, "a", encoding="utf-8") as f:
    f.write("ここから追記された行です。\n")
    f.write("ログや履歴のように、後から行を足していけます。\n")

# 3. 読み込み
with open(filename, "r", encoding="utf-8") as f:
    print("ファイルの最終的な中身:")
    for line in f:
        print(line.strip())
Python

このコードで、

  • "w" モードで「最初の内容」を書き込み
  • "a" モードで「追加の行」を追記
  • "r" モードで「最終的な中身」を読み込み

という一連の流れを体験できます。

Day 12のまとめ

Day 12では、ファイル操作を通して、

  • open() でファイルを開き、read()write() で中身を読み書きする基本
  • "r"(読み込み)、"w"(書き込み・上書き)、"a"(追記)というモードの違い
  • with 文で「開いたら必ず閉じる」を自動化する書き方
  • encoding="utf-8" で日本語を安全に扱う重要性

をステップバイステップで見てきました。

ここまで来ると、「プログラムがファイルと対話できる」という感覚が少し育っているはずです。 この感覚は、ログ保存、設定ファイル、データの永続化など、より実践的なプログラムを作るうえでの大きな一歩になります。


Day 12:ファイル操作で「テキストメモアプリ」を作る

Day 12の制作編では、「テキストメモアプリ」を題材にして、ファイル操作の基本を一気に体験していきます。 open()、読み込み、書き込み、追記、with、文字コードをすべて「メモ帳アプリ」の中で使いながら、 プログラミング初心者の方にも分かりやすい形でステップバイステップで説明していきます。

テキストメモアプリの全体イメージ

まず、「テキストメモアプリでやりたいこと」を整理します。

  • メモを保存するテキストファイルを1つ用意する
  • ユーザーが入力したメモをファイルに書き込む(新規作成・上書き)
  • 既存のメモに追記する
  • 保存されているメモを読み込んで表示する

この流れの中で、ファイル操作の各要素を自然に使っていきます。

open() とモードの基本をメモアプリの文脈で理解する

ファイル操作の入り口は open() です。 テキストメモアプリでは、次のようなモードを使い分けます。

  • "r":読み込み(read)
  • "w":書き込み(write、上書き)
  • "a":追記(append、末尾に追加)
# メモファイルの名前を決めておきます
MEMO_FILE = "memo.txt"

# 読み込みモードで開く例
f = open(MEMO_FILE, "r", encoding="utf-8")

# 書き込みモードで開く例(既存の内容は上書きされます)
f = open(MEMO_FILE, "w", encoding="utf-8")

# 追記モードで開く例(既存の内容は残り、末尾に追加されます)
f = open(MEMO_FILE, "a", encoding="utf-8")
Python

ここで重要なのは、「どのモードを使うかでファイルの扱い方が変わる」という点です。 メモアプリでは、「新しくメモを作るときは w」「既存メモに追加するときは a」「メモを読むときは r」という使い分けをします。

with を使って「開いたら必ず閉じる」メモアプリにする

open() で開いたファイルは、使い終わったら close() で閉じる必要があります。 しかし、毎回 close() を書き忘れないようにするのは少し大変です。

そこで、テキストメモアプリでは with を使う書き方を採用します。

MEMO_FILE = "memo.txt"

# メモの読み込み
with open(MEMO_FILE, "r", encoding="utf-8") as f:
    content = f.read()
    print("現在のメモ内容:")
    print(content)
# ここを抜けた時点で、自動的に f.close() が呼ばれます

# メモの書き込み(上書き)
with open(MEMO_FILE, "w", encoding="utf-8") as f:
    f.write("これは新しいメモです。\n")
    f.write("上書きモードで保存されました。\n")

# メモの追記
with open(MEMO_FILE, "a", encoding="utf-8") as f:
    f.write("この行は追記されたメモです。\n")
Python

with open(...) as f: の形を使うことで、

  • ブロックを抜けたときに自動で close() される
  • 例外が発生しても後片付けが行われる

というメリットが得られます。 メモアプリのように「頻繁にファイルを開く」プログラムでは、with を使うのが基本だと考えてよいです。

文字コード(encoding)をメモアプリで意識する

テキストメモアプリでは、日本語のメモを扱うことが多いので、文字コードの指定が非常に重要になります。 Pythonでは、open()encoding 引数で文字コードを指定します。

MEMO_FILE = "memo.txt"

# 日本語メモを書き込む
with open(MEMO_FILE, "w", encoding="utf-8") as f:
    f.write("こんにちは、テキストメモアプリです。\n")
    f.write("日本語のメモも安全に保存できます。\n")

# 日本語メモを読み込む
with open(MEMO_FILE, "r", encoding="utf-8") as f:
    content = f.read()
    print("読み込んだメモ:")
    print(content)
Python

ポイントは次の通りです。

  • "utf-8" は、現在もっとも一般的な文字コードであり、日本語も安全に扱えます。
  • 書き込みと読み込みで同じ文字コードを使うことが重要です。
  • 文字コードを指定しないと、環境によっては文字化けが起きることがあります。

テキストメモアプリでは、「encodingを必ず明示する」ことをルールにしておくと安心です。

テキストメモアプリの基本機能を組み立てる

ここからは、実際に「テキストメモアプリ」として動くプログラムを組み立てていきます。 機能は次の3つに絞ります。

  1. メモを表示する(読み込み)
  2. メモを上書き保存する(書き込み)
  3. メモを追記する(追記)

メニュー付きテキストメモアプリ(コメント付き)

# テキストメモアプリ Day 12

MEMO_FILE = "memo.txt"  # メモを保存するファイル名


def show_memo():
    """現在のメモ内容を表示する関数です。"""
    try:
        with open(MEMO_FILE, "r", encoding="utf-8") as f:
            content = f.read()
            if content:
                print("▼ 現在のメモ内容")
                print("--------------------")
                print(content)
                print("--------------------")
            else:
                print("メモファイルは存在しますが、内容が空です。")
    except FileNotFoundError:
        # ファイルがまだ作られていない場合
        print("まだメモが作成されていません。")


def overwrite_memo():
    """メモを新しく書き直す(上書き保存する)関数です。"""
    print("新しいメモを入力してください。")
    print("入力を終了するには、空行のままEnterを押してください。")

    lines = []
    while True:
        line = input()
        if line == "":
            break
        lines.append(line)

    # 入力された行を1つの文字列にまとめます
    memo_text = "\n".join(lines) + "\n"  # 最後に改行を追加

    # 上書きモードでファイルに保存します
    with open(MEMO_FILE, "w", encoding="utf-8") as f:
        f.write(memo_text)

    print("メモを上書き保存しました。")


def append_memo():
    """既存のメモに追記する関数です。"""
    print("追記するメモを入力してください。")
    print("入力を終了するには、空行のままEnterを押してください。")

    lines = []
    while True:
        line = input()
        if line == "":
            break
        lines.append(line)

    if not lines:
        print("追記する内容が入力されませんでした。")
        return

    memo_text = "\n".join(lines) + "\n"

    # 追記モードでファイルに追加します
    with open(MEMO_FILE, "a", encoding="utf-8") as f:
        f.write(memo_text)

    print("メモを追記しました。")


def main():
    """テキストメモアプリのメイン関数です。"""
    while True:
        print("\n=== テキストメモアプリ ===")
        print("1: メモを表示する")
        print("2: メモを上書き保存する")
        print("3: メモを追記する")
        print("4: 終了する")

        choice = input("番号を入力してください: ")

        if choice == "1":
            show_memo()
        elif choice == "2":
            overwrite_memo()
        elif choice == "3":
            append_memo()
        elif choice == "4":
            print("テキストメモアプリを終了します。")
            break
        else:
            print("1〜4の番号を入力してください。")


# プログラムのエントリポイント
if __name__ == "__main__":
    main()
Python

このテキストメモアプリでは、

  • show_memo()"r" モード+with を使った読み込み
  • overwrite_memo()"w" モード+with を使った上書き保存
  • append_memo()"a" モード+with を使った追記
  • すべてのファイル操作で encoding="utf-8" を指定

という形で、Day 12の要素をすべて体験できるようになっています。

Day 12(制作編)のまとめ

Day 12の制作編では、「テキストメモアプリ」を通して、

  • open()"r""w""a" モードの使い分け
  • with 文で「開いたら必ず閉じる」安全なファイル操作
  • encoding="utf-8" で日本語メモを文字化けなく扱う重要性
  • 読み込み・書き込み・追記を1つのアプリの中で組み合わせる流れ

をステップバイステップで体験していただきました。

ここまで来ると、「プログラムがファイルと対話し、メモやログを残せる」という感覚がかなり具体的になっているはずです。 この感覚は、今後の90日間で作るあらゆるツールやアプリにとって、実用性と信頼性の土台になっていきます。

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