CSV踩坑(一):EXCEL保存惹的祸
- 2026-09-26 15:00:08
📊 字数:约 2129 字 | ⏱ 阅读时长:约 7 分钟
公众号:期权简谱 | 作者:SoloVol量化
别猜,去筛。

开篇:那天早上,系统很自信地告诉我"夜盘平稳"
早上 08:45,隔夜跳空扫描,按时跑完,日志干干净净。没有报错,没有异常,没有预警邮件。
看上去,岁月静好,直到我点开日志正文,看见一行:
[扫描] 夜盘候选品种: 0 个0 个。不是"0 个触发预警",是"0 个品种进入扫描"。系统那天早上什么都没看,然后,非常礼貌地告诉我,一切正常。
而毁掉这一切的,不是行情接口、不是断网、不是交易所改规则,而是我前一天晚上,用 Excel 保存了一个 CSV。
Excel 保存时,别大意
现实里,最常见的破坏者,是坐在电脑前、只想"看一眼数据"的你自己。你没写代码,没跑脚本,只是双击了一个CSV文件,顺手按了保存。
用 Excel 看 CSV 可以,但永远要走"数据 → 从文本/CSV 导入",编辑完,导出也选 CSV (逗号分隔);最稳的是,根本不碰 Excel,用指定编码的纯文本编辑器或脚本读写。
CSV ,没有标签页这回事
我的系统里,有一张品种参数表:67 行,每行一个期权品种,记着交易所、合约单位、保证金比例、有没有夜盘、夜盘几点收。它是整套夜盘监控的唯一事实源,谁该被扫描、拿什么时间当基准,全从这张表推。
那天晚上,我想查证一个品种的夜盘收盘时间,于是,双击文件,用 Excel 打开,看完文件,还顺手新增了一个"备注"标签页,写了一行注释,保存,关闭。Excel 弹过一个提示框,我大概点了"是"。
问题在这:CSV 是纯文本单表格式,它根本不知道"标签页"是什么。 保存 .csv 的时候,Excel 只会写下当前活动的那一个工作表,也就是我刚建的"备注"页。原来那 67 行数据,连告别都没有,直接被整表丢弃。
打开文件一看,全表只剩孤零零一行说明文字。
这就像你把一整柜衣服拍了张照,然后把照片放回衣柜,把衣服全扔了。 文件还在,名字没变,修改时间正常,大小从几 KB 变成几十字节。除非,你专门去看,否则,毫无破绽。
真正致命的是,"它不报错"
第二天早上的链路是这样走的:
读参数表 → 解析出 0 个品种 → 取夜盘品种 → 得到空列表 → 遍历空列表 → 一个都没触发 → 判定"无异常" → 不发邮件。
每一步都合法,每一步都没有异常。整条链路,平静地,把"数据没了"翻译成了"市场没事"。
这是“指标静默退化”的其中一种表现形式:系统每天照跑,数据却在悄悄变差。凶手,有时是回退常数,有时是你自己的鼠标,有时是一个"好心"的预览器。
沉默,是这类事故的共同特征。会报错的 bug 是会响的烟雾报警器,静默失败是被人摘掉电池的那一个。房子照样烧,只是没人叫醒你。
修复只花五分钟,加固才是重点
恢复本身很简单:拿一周前的 .bak 备份覆盖回来,重新应用最近那次品种修正,回到 67 行、49 个夜盘品种。
真正值钱的是加固:
1. 解析层,检查空值。参数表解析完,如果得到 0 个品种,直接抛异常中止。错误信息里,明写一句"可能是 Excel 多 sheet 覆盖,请用 .bak 恢复"。把当年的诊断结论直接写进未来的报错里,下次不用再查一遍。 2. 调用层,兜底。取夜盘候选品种时,如果候选为 0,同样抛异常中止,绝不允许再输出一句"夜盘平稳"。 3. CSV ,永远保持纯数据。 需要写备注就另存 .md,数据表不加标签页、不混说明。4. 改写CSV前,先关预览标签。凡是会"自动重新渲染并写回"的面板,都是潜在风险源,改之前,先关闭它的预览标签。(下一篇 CSV踩坑(二),会详细说这个。)
"没有数据"和"数据显示没事"是两件事,天差地别,系统必须能分清。 空盘子和吃干净的盘子,长得像,但一个是没上菜,一个是吃完了。
一条真实系统产出
事故当天日志:[扫描] 夜盘候选品种: 0 个,触发 0,全天无预警邮件,参数表实际内容 = 一行备注文字。
加固后,同场景复现:解析层直接抛出 RuntimeError: 品种参数为空(可能是 Excel 多 sheet 覆盖,请用 .bak 恢复),任务失败,并留下日志,不再产出"平稳"结论。
这篇文章你只需要带走三样东西
1CSV 不支持多工作表,加个标签页保存 = 原数据整表丢弃。 文件名不变、时间正常、只是内容没了;想写备注请另存 .md,数据表永远保持纯数据。
2"没有数据"必须和"数据显示没事"区分开。 空输入一路合法地流下去,最后会被翻译成"市场平稳",这是所有静默失败的通用剧本。
3在解析层做空值检查,让它吵起来。 把当年的诊断结论直接写进报错文案("可能是 Excel 多 sheet 覆盖")里,是性价比最高的加固,下一次事故的排查时间从两小时变成两秒。
翻车实录
整个上午,我都在疯狂排查:交易所改接口?行情源限流?时区写错了?我甚至打开了浏览器,准备查公告,表情严肃得像在查核弹发射密码。
真相是,我昨晚为了写一行"这里存的是全部 67 个期权品种"的备注,把那 67 个品种全删了。一行注释,把被注释的对象,流放到了天堂。
这大概是我职业生涯里最文艺的一次自杀式操作。不是Bug,是一首关于存在与消逝的微型史诗。
最危险的数据事故,不是别人黑进来改的,是你自己点了保存。
系统不会因为你手滑而尖叫,除非你亲手教它尖叫。
⚠️ 免责声明:本文为「期权简谱」个人量化研究的方法 / 案例演示,所有观点、数据、回测均为历史记录,不构成任何投资建议或买卖邀约。市场有风险,交易须谨慎;期权具有杠杆属性,可能损失全部权利金。文中提及的品种、策略、参数仅供学习交流,过往表现不预示未来收益。据此操作,盈亏自负。
