実用ガイド
Python自動化の実用ガイド
Python自動化:大きな自動化を組む前に、壊れにくい一作業から始める
比較と判断ガイド
| 判断項目 | 実用上の答え |
|---|---|
| 読者の悩み | 毎日同じPC作業に時間を取られている |
| 判断基準 | 入力が毎回同じならPython、画面が変わるならまず手順を固定する |
| 比較 | ファイル処理は安定しやすいが、画面操作は変更に弱く保守が増える |
| 具体的な検証 | 同じ列の週次CSVをカテゴリ別に合計し、入力を残して新しいCSVへ出す |
| 避けたい失敗 | いきなり複数サイトの画面操作を自動化して保守不能にする |
| 最初の一手 | 10分以上かかる繰り返し作業を一つ選び、入力・出力・所要時間を記録する |
| 確認する根拠 | Python公式ドキュメントで使う標準機能と制約を確認する |
| このガイドで試すこと | 比較表・CSVの具体例・最初のスクリプトチェックリスト |
購入を検討する前に、この表で最小限の検証方法を決めてください。
どの方法を選ぶか
| 方法 | 向く条件 | 負担・制約 |
|---|---|---|
| 表計算で手動集計 | 一度きりの少量データで、目視で結果を照合できる | 準備は少ない。毎週の貼り付けや範囲指定を忘れると集計がずれる |
| Pythonのcsv標準ライブラリ | categoryとamountの列が毎週同じで、処理を繰り返す | 初回に入力検査を作る。列名が変わったら停止して修正する |
| 画面クリックの自動化 | CSVを書き出す手段がなく、画面の操作だけが残る | 画面変更に弱い。この例では不要なので導入しない |
3行のCSVを、元ファイルを残してカテゴリ別に集計する
以下は架空データによる説明用の例です。顧客の実績や、時間短縮・収益の保証ではありません。
入力
category,amount
books,1200
software,600
books,800
手順
- 空の作業フォルダを作り、入力例をUTF-8のweekly.csvとして保存する。amountは0以上の整数で、全行を同じ単位にそろえる。
- 下のコードをsummarize.pyとして同じフォルダへ保存する。Python 3だけで動き、追加パッケージは使わない。
- ターミナルでそのフォルダへ移動し、python summarize.pyを実行する。Windowsでpythonがない場合は、インストール済みPythonのpy summarize.pyを使う。
- 新しくできたtotals.csvとコンソールの合計を期待結果と照合する。もう一度試すときは別の空フォルダを使う。既存のtotals.csvは上書きせず停止する。
実行するコード
import csv
from collections import defaultdict
from pathlib import Path
totals = defaultdict(int)
with Path("weekly.csv").open(encoding="utf-8-sig", newline="") as source:
reader = csv.DictReader(source)
if len(reader.fieldnames or []) != 2 or set(reader.fieldnames) != {"category", "amount"}:
raise ValueError("Expected category and amount columns")
for line, row in enumerate(reader, start=2):
if None in row or any(value is None for value in row.values()):
raise ValueError(f"Wrong column count on line {line}")
category = row["category"].strip()
raw_amount = row["amount"].strip()
if not category or category[0] in "=+-@" or not raw_amount.isascii() or not raw_amount.isdigit():
raise ValueError(f"Invalid category or non-negative integer amount on line {line}")
totals[category] += int(raw_amount)
# Exclusive creation: an existing result is never overwritten.
with Path("totals.csv").open("x", encoding="utf-8", newline="") as target:
writer = csv.writer(target)
writer.writerow(["category", "amount"])
writer.writerows(sorted(totals.items()))
print(f"{sum(totals.values())} total; {len(totals)} categories")
期待する出力
category,amount
books,2000
software,600
Console: 2600 total; 2 categories
booksは1,200+800で2,000、softwareは600、合計は2,600。入力3行が出力2行になるのはカテゴリ集計のため。列が増減した場合や負数・小数は停止する。この例の仕様に合わない値を黙って0へ置き換えない。
実作業へ使う前のチェックリスト
- 実データはコピーで試し、weekly.csvの内容が変わっていないことを確認したか
- 列名がcategoryとamountの2つで、文字コードと金額の単位をそろえたか
- 入力の合計2,600と出力の合計2,600が一致し、同じカテゴリが正しくまとまったか
- 準備・実行・結果確認・修正まで含めた時間を手動集計と比較したか
続けずに止める条件
列名や単位が毎回変わる、集計の意味を説明できない、エラーを無視しないと動かない場合は自動化を止める。先に入力側のルールをそろえる。
次に判断すること
同じ形式のコピーを3回処理して結果と手間を確認する。標準ライブラリで足りる間は有料ツールを買わない。複雑な変換が必要になってから、対応形式・保守のしやすさ・総費用で比較する。
この例は有料商品の購入なしで試せます。このページには商品購入リンクを掲載していません。
リンクと広告について
このガイドは商品の購入なしで試せます。商品購入リンクは掲載していません。最新の利用条件は参考ソースで確認してください。広告/PRは明示し、誇大表現や収益保証はしません。