プログラミング

Step 18: ファイルの読み込みと書き込みの基本

Step 18: ファイルの読み込みと書き込みの基本

概要

フリーランスエンジニア スリーネクスト

プログラムのデータをファイルに保存し、永続化するための基本操作を解説します。「開く・操作する・閉じる」という3ステップを、ファイルを自動で閉じる安全なwith構文を用いて実践。ファイルを上書きする書き込み('w')、内容を読み込む('r')、末尾に追記する('a')という3つの主要モードの違いを、具体的なコードと図解で明確にします。

ユーザー設定の保存やログ記録など、実用的なプログラム開発に不可欠なファイルI/Oの第一歩を確実に踏み出せます。

目次
「ゼロから始めるPython学習」各ステップのタイトル案
ゼロから始めるPython学習 STEP20目次

プログラミング未経験者向けPython入門講座。環境構築から変数、if文、for文、関数といった基本までを20のステップでわかりやすく解説します。自分のペースで一歩ずつ着実に学び、プログラミングの第一歩を踏み出しましょう!

続きを見る

はじめに

これまでのプログラムでは、変数に格納したデータはプログラムが終了すると全て消えてしまいました。これでは、計算結果やユーザーの入力内容を後から見返すことができません。

この問題を解決するのがファイル操作です。プログラムからファイルにデータを書き込んで保存したり、ファイルからデータを読み込んだりすることで、プログラムを終了してもデータを永続的に残すことができます。


今回は、Pythonでテキストファイル(.txtファイルなど)を読み書きする基本的な方法を学びます。これにより、簡単なメモ帳アプリや、設定を保存するプログラムなどを作れるようになります。

ファイル操作の基本3ステップ

Pythonでファイルを扱う際の基本的な流れは、常に以下の3ステップです。

  1. 開く (Open): 操作したいファイルを指定して開く。
  2. 操作する (Operate): ファイルにデータを書き込む、またはファイルからデータを読み込む。
  3. 閉じる (Close): 操作が終わったら、ファイルを閉じる。

ファイルを閉じる作業は非常に重要です。ファイルを閉め忘れると、書き込んだ内容が正しく保存されなかったり、他のプログラムがそのファイルを使えなくなったりする原因になります。

graph TD
    A["プログラム開始"] --> B["1 . ファイルを開く (Open)"];
    B --> C["2 . 操作する (読み書き)"];
    C --> D["3 . ファイルを閉じる (Close)"];
    D --> E["プログラム終了"];

with文を使った安全なファイル操作

ファイルを確実に閉じるために、Pythonでは with 文を使うのが一般的です。with 文のブロック内でファイル操作を行うと、ブロックを抜ける際に自動的にファイルが閉じられます。これにより、うっかりファイルを閉め忘れる心配がなくなります。

基本構文:

with open("ファイル名", "モード") as 変数:
    # このブロック内でファイル操作を行う
# ブロックを抜けると自動でファイルが閉じる
  • open(): ファイルを開くための組み込み関数。
  • ファイル名: 操作したいファイルの名前を文字列で指定します。(例: 'memo.txt'
  • モード: ファイルをどのような目的で開くかを指定する文字列。
    • 'w': 書き込み (Write) モード。
    • 'r': 読み込み (Read) モード。
    • 'a': 追記 (Append) モード。
  • as 変数: 開いたファイルを扱うための変数を指定します。慣例的に f (fileの頭文字) がよく使われます。

ファイルへの書き込み ('w' モード)

まずは、ファイルに文字列を書き込んでみましょう。書き込みには 'w' モードを使います。

注意点: 'w' モードは、ファイルが既に存在する場合、中身を全て消去して上書きします。存在しない場合は、新しくファイルを作成します。

コード例:

# 'hello.txt' というファイルを書き込みモードで開く
with open('hello.txt', 'w', encoding='utf-8') as f:
    f.write('こんにちは、世界!\n')  # .write()で文字列を書き込む
    f.write('Pythonからの書き込みです。\n')

print("ファイル 'hello.txt' への書き込みが完了しました。")

encoding='utf-8' は、日本語などのマルチバイト文字を正しく扱うための「文字コード」の指定です。日本語を扱う際は、これを付けておくと安心です。

\n は改行を表す特殊な文字です。これを入れないと、全ての文字列が一行につながってしまいます。

graph LR
    subgraph "Pythonプログラム"
        A["with open('hello.txt', 'w') as f:"]
        B["f.write('こんにちは、世界!\\n')"]
        C["f.write('Pythonからの書き込みです。\\n')"]
    end

    subgraph "ディスク上のファイル"
        D["hello.txt"]
    end
    
    A -- "ファイルを開く(準備)" --> D
    B -- "書き込む" --> D
    C -- "書き込む" --> D

このコードを実行すると、同じフォルダに hello.txt というファイルが作成され、中には2行のテキストが保存されています。

ファイルからの読み込み ('r' モード)

次に、先ほど作成したファイルの中身を読み込んでみましょう。読み込みには 'r' モードを使います。

方法1: .read() で全て読み込む

ファイルの内容全体を、一つの大きな文字列として読み込みます。

with open('hello.txt', 'r', encoding='utf-8') as f:
    content = f.read()  # .read()で全ての内容を一つの文字列として取得
    print("--- .read() の結果 ---")
    print(content)

方法2: for文で1行ずつ読み込む

これが最も一般的でメモリ効率の良い方法です。ファイルの内容を1行ずつ順番に処理できます。

with open('hello.txt', 'r', encoding='utf-8') as f:
    print("--- for文での読み込み結果 ---")
    for line in f:
        print(line, end='') # print自体が改行するため、元の改行(\n)を重複させない

line 変数には、ファイルの各行が改行文字 \n を含んだまま入ります。print関数もデフォルトで改行するため、end='' を指定しないと行間が一行空いてしまいます。

graph LR
    subgraph "ディスク上のファイル"
        D["hello.txt\n(こんにちは、世界!\\n...)"]
    end

    subgraph "Pythonプログラム"
        A["with open('hello.txt', 'r') as f:"]
        F["for line in f:"]
        L["line変数"]
    end
    
    A -- "ファイルを開く(準備)" --> D
    F -- "1行目を取得" --> D
    F --> L

ファイルへの追記 ('a' モード)

'w' モードはファイルを上書きしてしまいますが、既存の内容を残しつつ、末尾に新しい内容を追加したい場合もあります。その場合は 'a' (Append) モードを使います。

コード例:

# 'hello.txt' を追記モードで開く
with open('hello.txt', 'a', encoding='utf-8') as f:
    f.write('これは追記された行です。\n')

print("ファイル 'hello.txt' への追記が完了しました。")

このコードを実行した後 hello.txt を開くと、元の内容が残ったまま、3行目に新しいテキストが追加されていることが確認できます。

モードのまとめ

モード説明ファイルが存在しない場合ファイルが存在する場合
'r'読み込み (Read)エラーが発生内容を読み込む
'w'書き込み (Write)新規作成内容を全て消去して上書き
'a'追記 (Append)新規作成末尾に内容を追加

まとめ

今回は、プログラムのデータを永続化するためのファイル操作の基本を学びました。

  • ファイル操作の基本は「開く → 操作する → 閉じる」。
  • 安全なファイル操作のために、with open(...) as ...: 構文を使うのがベストプラクティス。
  • 目的別に3つの主要なモードを使い分ける。
    • 'r': 読み込み
    • 'w': 新規書き込み・上書き
    • 'a': 追記

ファイル操作は、ユーザーの設定を保存したり、作業のログを記録したり、CSVファイルなどのデータを読み込んで処理したりと、実用的なプログラムを作る上で欠かせない技術です。まずはこの3つのモードをしっかりマスターしましょう。

目次
「ゼロから始めるPython学習」各ステップのタイトル案
ゼロから始めるPython学習 STEP20目次

プログラミング未経験者向けPython入門講座。環境構築から変数、if文、for文、関数といった基本までを20のステップでわかりやすく解説します。自分のペースで一歩ずつ着実に学び、プログラミングの第一歩を踏み出しましょう!

続きを見る

-プログラミング