しごと自動化レシピ

WORK RECIPE Python

Pythonで部署別の架空経費を小数点まで集計する

部署ごとの経費を、二進浮動小数点を使わず集計します。入力金額を小数2桁までの文字列に制限し、通貨や税計算を混ぜない小規模な確認用データで合計を照合します。

掲載コード実行確認

確認日時:2026-10-17T07:36:11.573547+00:00

確認環境:{"os": "Windows", "os_release": "11", "python": "3.14.2", "launch_flags": ["-I", "-X", "utf8"]}

確認した範囲

  • 記事の入力例と期待結果を照合
  • 元入力のバイト列が不変

未確認・対象外

  • 実業務データ
  • 他OS・他Python版

実機での処理結果の確認と、記事の全画面操作の確認は別です。実行確認の記録(JSON)で確認結果と原稿のSHA-256を参照できます。

できあがるもの

営業の合計100.30、制作の合計50.00を表示する想定。入力行は変更せず、金額の丸めや税率適用は行わない。確認環境と範囲は本記事の実行確認欄を参照してください。

始める前に

  • Python 3.11以降の実行環境。標準ライブラリだけを使い、追加パッケージや外部APIは不要。python --versionで起動を確認する。
  • 新しいローカル検証フォルダに架空の入力だけを置く。本番の共有フォルダや同期フォルダで実行しない。
入力例

costs.csvの内容はdept,amount\n営業,100.10\n制作,50.00\n営業,0.20。単一通貨の架空データで100行以内。

手順

  1. costs.csvを新しい検証フォルダへ作る。通貨単位や税込・税抜の混在がないことを前提にし、マイナス金額・指数表記・桁区切りカンマはこの例では受け付けない。
  2. 同じ検証フォルダへrecipe.pyをUTF-8で保存し、次のコードをコピーする。入力名が合うか確認し、出力ファイルが必要な手順では未作成の名前を使う。 ```python import csv import re from collections import defaultdict from decimal import Decimal, localcontext from pathlib import Path with Path('costs.csv').open(encoding='utf-8-sig', newline='') as source: reader = csv.DictReader(source, strict=True) if reader.fieldnames != ['dept', 'amount']: raise ValueError('headers must be dept,amount') rows = list(reader) if len(rows) > 100: raise ValueError('maximum 100 rows') totals = defaultdict(Decimal) with localcontext() as context: context.prec = 28 for row in rows: if None in row or None in row.values(): raise ValueError('column count mismatch') if not row['dept'].strip() or not re.fullmatch(r'[0-9]{1,12}(\.[0-9]{1,2})?', row['amount']): raise ValueError('invalid department or amount') totals[row['dept']] += Decimal(row['amount']) for dept in sorted(totals): print(dept, format(totals[dept], '.2f')) ```
  3. ターミナルをその検証フォルダで開き、python recipe.pyを実行する。入力は読み取り専用で扱う。エラー時は元データを編集せず、表示されたファイル名や入力形式を確認して停止する。
  4. 画面の営業100.30と制作50.00を電卓の結果と見比べる。これは確認用表示だけで会計台帳へ書き戻さない。実データが大きい場合や返金を扱う場合は、上限と精度、負数の仕様を変えて別に検証する。

期待結果と照合する

営業の合計100.30、制作の合計50.00を表示する想定。入力行は変更せず、金額の丸めや税率適用は行わない。確認環境と範囲は本記事の実行確認欄を参照してください。

まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。

うまくいかないとき

  • Decimalへ渡す前にfloatへ変換しない。元の文字列から生成する。
  • 部署名の前後空白や別名はこの例では統合しない。集計の前に照合規則を決める。

止める・元に戻す

プログラムを終了する。画面出力だけなのでファイルの復元は不要。検証CSVとrecipe.pyを片付ける場合も原本とは分離する。

公式資料・対応範囲

参照日:2026-10-17。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。

同じツールで試す

Pythonの記事一覧へ →