「这数据很简单啊」——那句让你加班到深夜的温柔开场白
那天快下班的时候,同事走过来笑着说:「帮忙看一下这个CSV,很简单的,清理一下就好。」语气轻松,态度友善,就像在说「帮我倒杯水」一样自然。
然后,我加班到晚上十点。
那些「简单」背后的坑
打开文件,两千行产品数据,SKU、名称、价格、库存。扫了一眼,整整齐齐,干干净净。随手写段Python代码读进去,完美跑通,打印结果正常入库。
两小时后,前端崩溃了。数据库里的产品名称被拦腰截断,带「$」的字段全部解析失败。问题出在哪里?一条普通的产品记录:"Ergonomic Desk Chair (with "ergonomic" mesh)"
这条记录看起来完全正常。但问题就藏在最不起眼的地方——引号嵌套。外层引号是CSV的标准界定符,内层「ergonomic」两侧的双引号被CSV解析器误判为字段结束。「with」之后的内容全部丢失,数据库里只剩半截产品名。
Excel的显示太友好了,它自动转义了所有内容,让一切看起来井井有条。真正的问题躲在视觉盲区里,等着给你致命一击。
标准配置的失效时刻
遇到问题,第一反应当然是调参数。quotechar='"'配合doublequote=True,Python官方文档推荐的标准配置,理论上能处理嵌套引号。
测试结果:纹丝不动。
深入检查后发现,这批CSV文件的引号转义根本不一致。有的用""规范转义,有的直接裸奔。在「半手工」文件面前,标准库的配置无能为力,解析器的严格模式直接撂挑子。
最终只能用最笨的办法:先识别并替换已正确转义的引号,再统一处理落单的引号,最后还原。这个过程没有任何美感可言,但两千条数据最终完整入库了。
经验从来不是免费的
事后回想,问题的根源不在于代码能力,而在于对数据质量的信任。市场部说「简单」的时候,通常意味着:他们检查过了,应该没问题。这种信任建立在良好意愿上,却忽视了数据在传输、编辑、导出过程中可能发生的各种微妙变化。
从那以后,任何来自外部的CSV文件,我都会先用schema做完整验证:引号嵌套、特殊字符、编码一致性,一个都不能漏。这是保护自己,也是保护系统。
现在听到「简单」两个字,我会条件反射地多问一句:「能先发样本看看吗?」这句话多花三十秒,可能省下三个小时。
数据质量这件事,真的不能只靠信任。
