编号能否去零、空白能否补“未知”、同一客户多行是否等于重复,都应在写程序前确定。下面完整给出输入和应有结果,可检验 Codex 生成的清洗程序。
原文件有七行记录
保存为 UTF-8 的 customers.csv,用文本编辑器查看,不先让表格软件自动转换编号。
csv
customer_id,name,city,joined_at
00123,林甲,上海,2026/09/01
00124,周乙,,2026-09-02
00125,钱丙,未知,2026/09/03
00123,林甲,上海,2026/09/01
00126,"吴,丁",杭州,2026-02-30
00127,郑戊, 宁波 ,2026-09-04
,王己,北京,2026-09-05
姓名中的逗号被引号包住,不能用 split(",") 解析。下文行号包含第 1 行表头;本例没有带换行的引号字段,真实文件若有,应另记逻辑记录号。
规则先于结果
| 列或情况 | 本练习规则 | 禁止推断 |
|---|---|---|
| customer_id | 必填,保持原文本与前导零 | 不转数字,不补造编号 |
| name | 保留原值,CSV 引号只是编码 | 不把姓名逗号拆成两列 |
| city | 去两端空白;空仍为空,“未知”仍是字面值 | 不用“未知”填空 |
| joined_at | 只接受 YYYY/MM/DD 或 YYYY-MM-DD,校验真实日期,统一连字符 | 不把 2 月 30 日滚到 3 月 |
| 完全重复 | 四列原始解析值全相同,保留首次 | 同编号不同资料不能直接去重 |
| 异常行 | 缺编号、非法日期隔离,不进 clean.csv | 不悄悄修成最接近值 |
先按“原始字段相等”去重,再验证、归一化保留记录。按清洗后值去重是另一个口径,不能暗中切换。
给 Codex 的任务
text
读取 customers.csv,按本文规则写 clean_customers.py,使用 Python 标准库 csv 和 datetime。
生成 clean.csv、duplicates.csv、exceptions.csv、summary.json;不覆盖输入。
说明运行目录和编码。输出目录若已存在,报错要求换新目录,避免盖住旧结果。
duplicates 记录 source_line、first_line、原字段;exceptions 记录 source_line、reason、原字段。
错误日期必须拒绝,编号始终是字符串;使用标准 CSV writer 处理引号和逗号。
先展示规则对应的分支,再运行练习。环境没有 Python 则记“未执行”,不要填成功日志。
本文提供协作规格与预期工件;程序由 Codex 在你的环境生成并执行。不能只接受一句“清洗成功”。
应得到四行
clean.csv:
csv
customer_id,name,city,joined_at
00123,林甲,上海,2026-09-01
00124,周乙,,2026-09-02
00125,钱丙,未知,2026-09-03
00127,郑戊,宁波,2026-09-04
| 分类 | 原行 | 原因或关联 | 保留信息 |
|---|---|---|---|
| duplicate | 5 | 完全重复第 2 行 | 00123、原斜杠日期 |
| exception | 6 | invalid_date | 00126、吴,丁、2026-02-30 |
| exception | 8 | missing_customer_id | 空编号、王己 |
summary.json 应有 input_rows=7、clean_rows=4、duplicate_rows=1、exception_rows=2,即 7=4+1+2。字段变更另计:第 2/4 行日期格式各一次,第 7 行城市空格一次;三次字段变更不等于删除三行。
还要检查 00123 的文本、空 city 与“未知”的区别,异常表“吴,丁”仍是一格。Excel 双击打开显示 123 时,先查原 CSV 文本,再按文本列导入,不能直接认定清洗程序丢零。下一步可看按唯一键核对 Excel。
下一步
继续阅读与你当前问题相关的教程:


