Python × 入門 | #22 ファイルを読み書きしよう

0-21では便利な組み込み関数を学びました。今回はプログラムの外側にあるファイルへのデータの読み書きを学びます。ファイルに保存することで、プログラムを終了してもデータが残ります。

ファイル入出力

まずはPycoBlocksを開こう

下のPycoBlocksで直接作業するか、別タブで開き、生成されるPythonコードを見ながら進めてください。

モード 意味 ファイルがない場合
"r"読み取り(デフォルト)エラー
"w"書き込み(上書き)新規作成
"a"追記新規作成

PycoBlocksの仮想ファイルシステム

PycoBlocksはブラウザ上で動作するため、実際のOSのファイルシステムにはアクセスできません。その代わり、画面左上のファイルタブを使った仮想ファイルシステムが組み込まれています。

仮想ファイルシステムの使い方
  • 書き込みpy_file_write): プログラムを実行すると、指定したファイル名のタブが自動的に作成・更新される
  • 追記py_file_append): 既存タブの内容の末尾に追加される
  • 読み込みpy_file_read): 事前に「+」ボタンでタブを追加し、ファイル名を入力して内容を書いておく必要があります
  • 行リストで読み込みpy_file_readlines): py_file_read と同様に事前タブ作成が必要。各行をリストとして取得できます

ステップ1:ファイルに書き込む(py_file_write ブロック)

「タプル・セット」カテゴリの隣にある「ファイル」カテゴリからpy_file_writeブロックを選びます。ファイル名と書き込む内容を指定するだけです。

py_file_write ブロック例
with open("hello.txt", "w", encoding="utf-8") as f:
    f.write("こんにちは、PycoBlocks!")

ブロックを実行すると、画面左上に hello.txt タブが現れます。タブをクリックするとそこに書き込んだ内容が表示されています。実際のPythonでは with open() を使う書き方が標準です。

ステップ2:ファイルを読み込む(py_file_read ブロック)

ファイルを読み込むには、先にタブを用意する必要があります。画面右上の「+」ボタンを押してタブを追加し、ファイル名(例: hello.txt)を入力、タブのテキストエリアに読み込みたい内容を書いておきます。

その後、py_file_readブロックでファイル名と変数名を指定してプログラムを実行すると、タブの内容が変数に読み込まれます。

py_file_read ブロック例
with open("hello.txt", "r", encoding="utf-8") as f:
    content = f.read()
print(content)

読み込んだ内容は文字列として変数に入ります。printで表示するか、そのまま加工できます。

ステップ3:ファイルに追記する(py_file_append ブロック)

「ファイル」カテゴリのpy_file_appendブロックは、既存のファイルタブの末尾にテキストを追加します。実際のPythonでは open("ファイル名", "a")"a"(append)モードに相当します。

ファイル追記(appendモード)のブロック例
# 追記の例(Python コード)
with open("log.txt", "a", encoding="utf-8") as f:
    f.write("2026-05-03: アクセスがありました\n")

# ファイルの内容全体を読む
with open("log.txt", "r", encoding="utf-8") as f:
    content = f.read()
print(content)

ステップ4:複数行の読み書き(実際のPythonの書き方)

実際のPythonプログラムでは、行単位でファイルを読む場面も多い。readlines()はファイルの全行をリストとして返します。PycoBlocks では py_file_readlines ブロックと py_str_strip ブロック(前後の空白・改行を除去)、py_str_join ブロック(文字列で結合)を組み合わせます。

事前準備:sample.txt を作成してください

画面右上の「+」ボタンで sample.txt タブを追加し、以下の3行を入力してから実行してください。

apple
banana
cherry
readlines で複数行を読むブロック例
# readlines で行リストとして読む(py_str_strip で改行を除去)
with open("sample.txt") as _f:
    lines = _f.readlines()
for line in lines:
    print(line.strip())

# リストを join で結合してまとめて書く(py_str_join ブロック)
data = ["apple\n", "banana\n", "cherry\n"]
with open("fruits.txt", "w") as _f:
    _f.write("".join(data))

コーディングモード:ファイルを使った実用プログラム

ここまで学んだファイルと、0-17の例外処理・0-21の組み込み関数を組み合わせると、実用的なプログラムが作れます。

例①:シンプルな得点記録アプリ

得点を追記し、後から読み込んで統計を表示するプログラムです。

import statistics

# 得点を追記する
score = int(input("今日の得点を入力: "))
with open("scores.txt", "a", encoding="utf-8") as f:
    f.write(str(score) + "\n")

# 全得点を読んで統計を表示する
try:
    with open("scores.txt", "r", encoding="utf-8") as f:
        scores = [int(line.strip()) for line in f if line.strip()]
    print(f"記録数: {len(scores)}")
    print(f"最高: {max(scores)}  最低: {min(scores)}")
    print(f"平均: {statistics.mean(scores):.1f}")
except FileNotFoundError:
    print("まだ記録がありません")

例②:CSVデータとして保存・読み込み

ファイルはPart 2(データ分析入門)のCSVブロックと連携します。手書きCSVを仮想FSに保存し、csv モジュールで読む流れを確認しましょう。

import csv

# CSVファイルを書く
rows = [["name", "score"],
        ["Alice", "85"],
        ["Bob",   "72"],
        ["Carol", "91"]]
with open("result.csv", "w", encoding="utf-8") as f:
    for row in rows:
        f.write(",".join(row) + "\n")

# CSVファイルを読んで合計を計算する
with open("result.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    next(reader)          # ヘッダをスキップ
    total = sum(int(row[1]) for row in reader)
print(f"合計得点: {total}")

演習課題

課題22-1:ブロックでファイルに書き込む

py_file_writeブロックを使って、greeting.txtに好きなメッセージを書き込み、py_file_readブロックで読み込んでprintしてみましょう。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

ファイルに書いて読むブロック例
# ブロックで生成されるコード例
with open("greeting.txt", "w", encoding="utf-8") as f:
    f.write("こんにちは!")
with open("greeting.txt", "r", encoding="utf-8") as f:
    content = f.read()
print(content)

解説: py_file_write で書いたあと py_file_read で同じファイルを読みます。タブが自動作成されていることを確認しましょう。

課題22-2:メモ帳プログラム

ユーザーに1行入力させ、memo.txtに追記するプログラムを書いてみましょう。何度実行しても過去の内容が消えないようにしましょう("a"モードを使います)。

実行後の確認

memo.txt タブは実行時に自動で作成されます。実行後、画面右上の memo.txt タブをクリックして追記内容を確認しましょう。"a"(追記)モードなので、何度実行しても入力した内容が下に積み重なって残ります。事前にタブを用意したい場合は、画面右上の「+」ボタンで memo.txt を作成してから実行してもかまいません。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

inputをファイルに追記するブロック例
text = input("メモを入力: ")
with open("memo.txt", "a", encoding="utf-8") as f:
    f.write(text + "\n")
print("メモを保存しました")

解説: "a"(追記)モードを使います。"w"にすると毎回上書きされてしまうので注意。

課題22-3:行数を数える

テキストファイルを読み込み、行数を表示するプログラムを書いてみましょう。ファイルが存在しない場合はエラーメッセージを表示しましょう。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

readlinesで行数を数えるブロック例
try:
    with open("sample.txt", "r", encoding="utf-8") as f:
        lines = f.readlines()
    print(f"行数: {len(lines)}")
except FileNotFoundError:
    print("ファイルが見つかりません")

解説: readlines()でリストに変換しlen()で行数を得ます。try-exceptで安全に処理できます。

課題22-4:点数ファイルの平均を求める

scores.txtに数値を1行1つ書き込み、読み込んで平均点を計算して表示するプログラムを書いてみましょう。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

スコアをファイルに書いて平均を計算するブロック例
with open("scores.txt", "w") as _f:
    _f.write("85\n92\n78\n61\n95\n")
with open("scores.txt") as _f:
    lines = _f.readlines()
stripped = [line.strip() for line in lines if line.strip() != ""]
scores = list(map(int, stripped))
print(f"平均: {sum(scores) / len(scores):.1f}")

解説: 読み込んだ各行は文字列なので int() で変換します。空行をif line.strip()で除外するのがポイントです。

課題22-5:単語の出現回数を数える

テキストファイルを読み込み、各単語の出現回数を辞書に集計して表示するプログラムを書いてみましょう。

▶ 模範解答と解説を見る

ブロックの組み合わせ例:

単語の出現回数を辞書でカウントするブロック例
with open("text.txt", "w") as _f:
    _f.write("the cat sat on the mat the cat\n")
counter = {}
with open("text.txt") as _f:
    content = _f.read()
words = content.split()
for word in words:
    counter[word] = counter.get(word, 0) + 1
for word, count in sorted(counter.items()):
    print(f"{word}: {count}回")

解説: dict.get(key, 0)でキーがないときに0を返します。辞書の出現カウントに頻出のパターンです。

まとめ

  • PycoBlocksではpy_file_writepy_file_readpy_file_appendpy_file_readlinesブロックで仮想ファイルシステムを操作できます
  • 書き込みは自動でタブが作成されます。読み込みは事前に「+」でタブを作っておく必要があります
  • 実際のPythonでは with open(ファイル名, モード, encoding="utf-8") as f: が基本の書き方
  • "r" で読み取り、"w" で上書き、"a" で追記
  • read()で全体、readlines()で行リスト、ループで1行ずつ読める
  • ファイル操作にはtry-except FileNotFoundErrorを組み合わせるのが基本です

お疲れさまでした!Python × 入門 シリーズはこれで完了です。修了後は Part 1 アルゴリズムPart 2 データ分析Part 3 Pico 電子工作Part 5 ゲーム制作 のいずれにも進めます。

PAGE TOP