Kredo Blog: CSVの空欄・0・列不足を見分ける追加実習

この教材の14件は架空の学習用データです。既存の12件・305分を集計する教材とは別です。
目的は2列のCSVの構造とminutesの状態を表示して、確認する理由を見分けることです。
IDの形式・重複・日付・科目の検証や集計は行いません。

Python 3.9以降、追加ライブラリ不要。実行確認環境と日付は記事の追記を参照。
ZIPを展開し、このREADMEとinspect_minutes.pyがあるフォルダーで実行します。

Macなど:
python3 -B inspect_minutes.py missing_cases.csv

WindowsのPythonランチャーを使う場合:
py -3 -B inspect_minutes.py missing_cases.csv

想定結果はexpected-output.txtにあります。
時間の条件を満たす3件（V001/V010/V014）と、確認が必要な11件になります。
スクリプトは入力CSVをrモードで読むだけで、ファイルを作成・上書きしません。
別のCSVで試すときは自分で用意した練習用コピーを使ってください。
表示には元の値が出るので、実データの出力をそのまま外部へ貼り付けないでください。

判定ルール:
- 列名と順番はrecord_id,minutes。
- minutesの列が足りない場合はCOLUMN_MISSING。余分な列がある場合はEXTRA_COLUMN。
- 空文字はEMPTY、空白文字だけはWHITESPACE_ONLY。
- 前後の空白を判定用の変数から取り除き、半角数字で1〜1440なら有効。
- 前後の空白を除いた結果が有効な場合はVALID_AFTER_TRIM。元の入力値は保持。
- 0/1441は範囲外、NULL/NaN/全角数字/単位付き/負数/小数はこの教材では対象外。
- CSV内のNULLやNaNを欠損へ自動変換する機能はありません。
- 01などの表示番号は読み取ったデータレコードの順番。物理行番号とは限りません。
- CSV構文・文字コード・ヘッダーのエラーではStoppedで終了します。

自動チェック:
python3 -B -m unittest -v test_inspect.py

練習:
1. 元のCSVを残し、コピーのV004を0から1へ変える。予想: 有効4件、確認10件。
2. 別のコピーでV005の末尾へカンマを1つ加える。予想: COLUMN_MISSINGがEMPTYへ変わり、件数は同じ。
3. 別のコピーでV007をNULLから空文字へ変える。予想: NOT_INTEGERがEMPTYへ変わる。NULLを欠損とする一般ルールが証明されたわけではない。

参考一次資料:
https://docs.python.org/3.12/library/csv.html
https://docs.python.org/3.12/library/functions.html#open
https://docs.python.org/3.12/library/stdtypes.html#truth-value-testing

原本のハッシュと実行結果、テスト結果は制作記録へ保存しています。
