進め方の地図
| 週 | やること | 仕上がるもの |
|---|---|---|
| 1週目 | 授業1: ファイルの読み書き | 学習記録ツール |
| 2週目 | 授業2: CSVを料理する | 売上CSVの集計プログラム |
| 3週目 | 授業3: 例外処理 ― 転ばないツール | 壊れない入力処理 |
| 4週目 | 授業4: ライブラリとpip | 道具箱の拡張体験 |
| 5週目 | 授業5: GitとGitHub | 管理された自分のコード置き場 |
| 6週目 | 月末制作 | 売上レポート自動生成ツール |
授業1: ファイルの読み書き
ファイルが扱えると、プログラムは「閉じたら忘れる計算機」から「記録が残る道具」に進化します。開け方の型は1つだけ、with open( ) です。
- 書き込む (追記)
from datetime import date memo = input("今日学んだことは? ") with open("kiroku.txt", "a", encoding="utf-8") as f: f.write(f"{date.today()} {memo}\n") print("記録しました!")"a"は追記モード (末尾に足す)、"w"だと上書き (前の内容が消える) です。この違いは事故のもとなので、最初に体で覚えます。 - 読み出す
with open("kiroku.txt", encoding="utf-8") as f: for line in f: print(line.strip())strip( )は前後の改行・空白を落とすおまじないです。 - 毎日使ってみるこのツールに、今日から本当に学習記録をつけましょう。自作の道具を自分で使う体験 (ドッグフーディングと呼びます) が、改善のアイデアを連れてきます。
- 「w」の事故を安全に体験する練習用の別ファイルで、
"a"を"w"に変えて2回実行し、消える様子を確認します。知識でなく体験にしておくと、本番で事故りません。
お題: 学習記録ツールに「①記録の全表示 ②件数の表示 ③キーワード検索 (含む行だけ表示)」のメニューをつけます (ユニット1の while True: メニューの型で)。
if keyword in line: だけでできます。たった1行で検索機能 ― これがPythonの気持ちよさです。授業2: CSVを料理する
CSVは「カンマ区切りの表」で、実務データの世界共通語です。Excelからも書き出せます。Pythonの csv モジュールで読むと、1行が辞書になります ― つまり、ユニット1で鍛えた「辞書のリスト」がそのまま登場します。
- 素材を保存する練習素材 pan-uriage.csv (パンの森の5月の売上100行) を右クリック →「名前を付けてリンク先を保存」で、作業フォルダに置きます。
- まず中身を見るVS Codeで開きます。1行目が見出し (日付・商品名・たんか・こすう・うりあげ)、2行目からがデータです。料理の前に素材を見る ― データ処理の鉄則です。
- 読み込む
import csv with open("pan-uriage.csv", encoding="utf-8") as f: rows = list(csv.DictReader(f)) print(len(rows)) # 何行ある? print(rows[0]) # 1行目はどんな辞書? - 合計を出す集計パターンの出番です。
CSVの中身は全部文字列なので、計算前のtotal = 0 for row in rows: total += int(row["うりあげ"]) print(f"5月の売上合計: {total}円")int( )を忘れずに。 - 商品別に数える「数える辞書」(ユニット1のおみくじ統計) で、商品ごとの売上合計を出します。
by_item = {} for row in rows: name = row["商品名"] by_item[name] = by_item.get(name, 0) + int(row["うりあげ"]) print(by_item)get(name, 0)は「まだ無ければ0から始める」という、集計の定番技です。
お題: 同じCSVから、①一番売れた商品 (合計額ベース) はどれ? ②日別の売上合計で、一番良かった日は? ③メロンパンの合計販売個数は?、の3つに答えるプログラムを書きます。
授業3: 例外処理 ― 転ばない道具にする
自分しか使わないプログラムは、転んでも平気です。でも「人に渡す道具」は、変な入力やファイルの欠品で止まってはいけません。try / except は、転びそうな処理に張るセーフティーネットです。
- 数値変換を守る
「abc」と入力されても、もう止まりません。try: kosuu = int(input("何個買いますか? ")) except ValueError: print("数字で入力してください (例: 3)") kosuu = 0 - ファイルの欠品を守る
エラーメッセージに直し方まで書くのが、道具職人の優しさです。try: with open("pan-uriage.csv", encoding="utf-8") as f: rows = list(csv.DictReader(f)) except FileNotFoundError: print("pan-uriage.csv が見つかりません。同じフォルダに置いてください。") rows = [] - 守りすぎない
except Exception:で何でも握り潰すと、本当の故障に気づけなくなります。「予想できる転び方だけ、名前を指定して受け止める」が原則です。
お題: 授業1の学習記録ツールと、演習2-Aの集計プログラムに、「変な入力」「ファイルがない」への防御を入れます。完成したら、意地悪な操作 (空入力・記号・ファイル退避) を5回やって、全部生き残るか検査します。
授業4: ライブラリとpip ― 巨人の肩に乗る
Pythonの強さの正体は、世界中の人が作った部品 (ライブラリ) を借りられることです。標準装備 (import するだけ) と、取り寄せ (pip install) の2段階があります。
- 標準装備を試す
import datetimeで日付、import randomで乱数はもう使いました。今日はimport collectionsを試します。
「数える辞書」を自分で書いた人だけが、この1行のありがたみを本当に理解できます。from collections import Counter colors = ["赤", "青", "赤", "緑", "赤", "青"] print(Counter(colors)) # Counter({'赤': 3, '青': 2, '緑': 1}) - 取り寄せてみるターミナルで
pip install tabulateを実行し、表をきれいに整形するライブラリを取り寄せます。from tabulate import tabulate data = [["メロンパン", 64200], ["食パン", 119000]] print(tabulate(data, headers=["商品", "売上"])) - 調べ方を覚える「Python CSV 集計 ライブラリ」のように検索し、出てきたライブラリの名前をAIに「初心者向けに説明して」と聞く ― これが新しい部品との出会い方です。
授業5: GitとGitHub ― 道具にも履歴を
ツールは育てるものなので、変更の履歴 (セーブポイント) が必要です。その道具がGitです。覚えるコマンドは、まず4つで足ります。
- Gitを入れる
git-scm.comからインストールします (設定は全部そのまま「Next」でOKです)。ターミナルでgit --versionが出れば成功です。 - 名乗る (最初の1回だけ)
git config --global user.name "yamada" git config --global user.email "自分のメールアドレス" - セーブするツールのフォルダで、
以後、区切りごとにgit init git add . git commit -m "学習記録ツールと売上集計を作成"add → commitを繰り返します。メッセージは「何をしたか」を短く ―「修正」ではなく「空入力の防御を追加」のように書きます。 - GitHubへ
github.comでアカウントとリポジトリ (公開設定はPublic) を作り、画面に表示されるgit remote add origin …とgit push -u origin mainの2行を貼って実行します。あなたのコードが、世界から見える場所に置かれました。
月末制作: 売上レポート自動生成ツール
「店長が毎月手作業で30分かけている集計を、3秒にする」― そんな想定の道具を作ります。このユニットの全部品の総結集です。
- 仕様:
python report.pyと実行すると、pan-uriage.csv を読んで、①総売上 ②商品別売上 (多い順) ③日別売上のベスト3 を計算し、report.txtに日付つきで書き出します。 - 作る順番: まず画面表示だけで3つの集計を完成 → 次にファイル書き出し → 最後に防御 (ファイルなし・空CSV) の順で進めます。動くものを少しずつ育てるのは、卒業制作まで続く基本姿勢です。
- 仕上げの検査: CSVを退避させて実行 → 優しいエラーで止まるか。CSVの1行をわざと壊して (うりあげ欄を「abc」に) → 生き残るか。
- 納品ごっこ: スタッフを店長役に、使い方を1分で説明して実行してもらいます。「説明1分で使えた」が合格ラインです。コードはGitHubにpushして完了です。
つまずきやすいポイント
encoding="utf-8" を必ずつけます。Windowsでは、つけ忘れると別の文字コードで開こうとして化けたり転んだりします。「openには必ずencoding」を合言葉にしましょう。発展チャレンジ (余力のある方へ)
- レポートに「前週比」(1週目と2週目の比較) を足してみましょう。日付の文字列から週を割り出す工夫が必要になります。
- ファイル整理ツールに挑戦しましょう。seiri-mihon.py を発展させ、「実際に動かす前に、何をどこへ移すか一覧表示だけする確認モード」をつけます。実務の自動化ツールに必須の安全装置です。
openpyxlというライブラリを調べてみましょう。CSVでなくExcelファイルを直接読み書きできます。事務仕事の自動化の主戦場です。