確認日時: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を参照できます。
できあがるもの
終了物理行3と4がCHECK、2行目は出力なしの想定。型・必須値・内容の正しさはこの検査の対象外。確認環境と範囲は本記事の実行確認欄を参照してください。
始める前に
- Python 3.11以降の実行環境。標準ライブラリだけを使い、追加パッケージや外部APIは不要。python --versionで起動を確認する。
- 新しいローカル検証フォルダに架空の入力だけを置く。本番の共有フォルダや同期フォルダで実行しない。
入力例
data.csvの4行は「id,memo,qty」「A01,"赤,青",2」「A02,単色」「A03,白,1,余分」。UTF-8で保存する。
手順
- 新しい検証フォルダへdata.csvを作る。ヘッダーを含むCSVとして扱い、空行も不一致として報告する仕様にする。1レコード内の改行がある場合は終了物理行番号を表示する。
- 同じ検証フォルダへrecipe.pyをUTF-8で保存し、次のコードをコピーする。入力名が合うか確認し、出力ファイルが必要な手順では未作成の名前を使う。 ```python import csv from pathlib import Path with Path('data.csv').open(encoding='utf-8-sig', newline='') as source: reader = csv.reader(source, strict=True) header = next(reader, None) if not header: raise ValueError('missing header') if len(set(header)) != len(header) or any(not name for name in header): raise ValueError('empty or duplicate header') width = len(header) for row in reader: if len(row) != width: print('CHECK ending line', reader.line_num, 'expected', width, 'actual', len(row)) ```
- ターミナルをその検証フォルダで開き、python recipe.pyを実行する。入力は読み取り専用で扱う。エラー時は元データを編集せず、表示されたファイル名や入力形式を確認して停止する。
- 画面で3行目が2列、4行目が4列と報告されるか確認する。2行目の赤,青は引用符内のカンマなので3列のまま通る想定。入力を書き直すのではなく、提供元へ対象行を確認するための記録に使う。
期待結果と照合する
終了物理行3と4がCHECK、2行目は出力なしの想定。型・必須値・内容の正しさはこの検査の対象外。確認環境と範囲は本記事の実行確認欄を参照してください。
まずこの入力例で確認し、件数や値が一致しているかを見ます。完了表示だけで判断せず、重複・空欄・対象外データも残っていないか確認してください。
うまくいかないとき
- 単純なsplit(',')では引用符内のカンマも分割される。CSVパーサーを使う。
- strictでもすべての業務ルール違反を検出するわけではない。列名や値の検査を別に用意する。
止める・元に戻す
プログラムを終了する。CSVは読み取りだけなので元データの復元は不要。エラー行を確認しても原本は上書きしない。
公式資料・対応範囲
参照日:2026-10-17。公式資料の一般的な機能説明と、本記事固有の入力例の実行検証は別です。実務での短縮時間や効果は未計測です。