
CSV 这个格式说起来简单真到批量处理的时候坑一点都不少。我做流程自动化这几年接触过的数据类需求里CSV 相关的至少占三成——不是读取时中文变乱码就是写入后 Excel 打开全是问号再不然就是几十个文件要合并手动复制粘贴到怀疑人生。影刀 RPA 在这类场景里其实很好用它把文件读写、表格操作这些底层能力封装成了可视化指令不需要你写多少代码就能把读 CSV、清洗数据、写回文件、批量合并这一整套流程跑通。这篇内容就是围绕影刀 RPA 处理 CSV 文件的完整链路来展开的从最基础的读取写入到编码问题的排查再到多文件合并这种稍微复杂一点的场景我都会结合自己实际踩过的坑讲清楚。不管你是刚接触 RPA 的新手还是已经用过一段时间但总在 CSV 上翻车的朋友应该都能从里面找到能直接抄作业的东西。1. 先搞清楚 CSV 到底是个什么东西1.1 CSV 的本质用逗号分隔的纯文本很多人把 CSV 当成一种表格文件这个理解不算错但不够准确。CSV 的全称是 Comma-Separated Values翻译过来就是逗号分隔值它的本质是一个纯文本文件只不过文本内容按照一定的规则组织成了行列结构。你用记事本打开一个 CSV 文件看到的是这样一行行的文本字段之间用逗号隔开每行代表一条记录。而 Excel 打开它的时候会自动按照逗号去切分把它渲染成表格的样子。这个认知很关键因为它决定了你在影刀里处理 CSV 的思路。CSV 不是二进制格式没有复杂的文件头结构所以读取的时候本质上就是读文本 按规则解析。影刀提供的 CSV 读取指令底层做的就是这件事把文件内容读进来按照分隔符切分成二维数据结构再交给你后续处理。理解了这一层后面遇到乱码、分隔符错乱这些问题你就能从文本编码和分隔规则两个角度去定位而不是一脸懵。还有一点要提醒CSV 虽然叫逗号分隔但实际使用中分隔符不一定非得是逗号。有些系统导出的文件用的是分号、制表符甚至竖线。影刀的 CSV 指令一般都允许你指定分隔符这个参数别忽略默认逗号处理不了的文件换个分隔符可能就通了。1.2 为什么自动化场景里 CSV 出现频率这么高我观察下来CSV 在自动化流程里出场率极高核心原因是它通用、轻量、好生成。几乎所有的业务系统、数据库、数据分析工具都支持导出 CSV它不像 xlsx 那样有复杂的格式和样式纯文本意味着任何程序都能轻松读写不会因为缺少某个库就打不开。对于 RPA 来说这意味着流程的输入输出用 CSV 是最稳妥的选择——上游系统导出的数据是 CSV你的机器人处理完再输出 CSV中间不涉及格式转换的兼容性问题。另外一个现实因素是很多企业的数据量并不小几万行甚至几十万行的数据用 Excel 处理会卡顿但 CSV 因为是纯文本读写速度快得多。影刀在处理大文件 CSV 时如果直接用表格类指令可能会比较吃力但用文本流式读取的方式就能扛住。这也是为什么我建议新手先把 CSV 的读写逻辑吃透它是你后面处理各种数据流程的地基。1.3 影刀处理 CSV 的两种典型路径在影刀里处理 CSV实际上有两条路可以走选哪条取决于你的具体需求。第一条是专用 CSV 指令路径影刀有专门的读取 CSV 文件和写入 CSV 文件指令你指定文件路径、编码、分隔符它直接帮你解析成表格数据或者把表格数据写成 CSV适合结构规整、字段固定的标准场景。第二条是文本处理路径把 CSV 当普通文本读进来自己按行、按分隔符去切分处理适合文件结构不规则、需要精细控制的场景。这两条路没有绝对的好坏我一般的判断标准是如果 CSV 结构标准、字段数量固定、没有嵌套引号这类复杂情况直接用专用指令省事如果文件里字段内容本身包含逗号、换行或者分隔符不统一那就走文本处理路径自己控制解析逻辑避免指令解析出错。下面几个章节我会分别把这两条路的实操讲透。2. 读取 CSV从打开文件到拿到干净数据2.1 读取指令的核心参数怎么填影刀的读取 CSV 文件指令看起来参数不多但每一个都影响最终结果。我逐个说一下我的理解。文件路径这个不用多说注意用绝对路径相对路径在不同运行环境下容易出问题。编码格式是最容易翻车的地方后面单独讲。分隔符默认是逗号如果你的文件是分号或制表符分隔这里必须改否则整行会被当成一个字段。是否包含表头这个选项决定第一行数据是作为列名还是作为普通数据行选错了会导致后续取列的时候对不上。还有一个容易被忽略的点是数据起始行。有些 CSV 文件前面有几行说明文字或者空行真正的表头在第三行、第五行才开始。这时候你不能直接读要么先用文本方式跳过前面的行要么在读取指令里指定起始行。我遇到过不少新手在这里卡住读出来的数据第一行是报表导出时间2024-xx-xx这种说明文字后面全乱了。所以拿到一个陌生 CSV我习惯先用记事本打开瞄一眼前几行确认结构再配置指令。2.2 编码问题中文乱码的根源与解法中文乱码是 CSV 处理里出现频率最高的问题没有之一。根源在于文件的编码格式和读取时指定的编码格式不一致。常见的编码有 UTF-8、GBK、GB2312、ANSI 这几种国内很多老系统、财务软件导出的 CSV 默认是 GBK 或者 ANSI而影刀读取指令默认可能是 UTF-8两边对不上中文就变成了一堆问号或者方块。我的处理原则很简单先探测再指定。拿到文件后用记事本或者 VS Code 打开看一眼VS Code 右下角会直接显示当前编码。如果是 GBK那读取指令里就把编码设成 GBK如果是 UTF-8就设 UTF-8。这里有个细节UTF-8 还分带 BOM和不带 BOM两种带 BOM 的文件开头会有几个不可见字符有时候会导致第一列列名读取异常影刀里如果遇到这种情况可以尝试用UTF-8 with BOM或者读取后手动处理掉首行的异常字符。如果文件编码不确定还有个笨但有效的办法用影刀的文本读取指令先把文件当纯文本读进来然后尝试用不同编码去解码看哪个能正常显示中文。实际项目中我一般会在流程开头加一个编码判断的小逻辑根据文件来源固定用某个编码因为同一套系统导出的文件编码通常是稳定的不需要每次都动态探测。提示写入 CSV 时同样要注意编码。如果你写出的文件要给 Excel 打开建议用 GBK 或者带 BOM 的 UTF-8否则 Excel 直接双击打开可能显示乱码。纯 UTF-8 不带 BOM 的文件Excel 有时识别不了中文。2.3 读取后的数据结构长什么样用专用指令读取 CSV 后影刀返回的通常是一个二维的表格数据结构你可以理解成行的列表每行又是一个字段的列表。第一行如果是表头那它也会作为一行数据存在后续你取某一列的时候要么按列索引取要么按列名取取决于指令的配置。我建议新手在读取之后先加一个打印或者写入日志的动作把读到的数据行数和前几行内容输出出来确认结构符合预期再往下做。这里有个实操心得不要假设列的顺序永远不变。有些系统升级后导出的 CSV 列顺序会调整如果你代码里写死了第 3 列是金额某天就可能取错数据。稳妥的做法是按列名去定位影刀的表格操作一般支持按列名取值虽然稍微麻烦一点但抗变化能力强很多。如果确实要按索引取至少在流程里加一个列名校验发现列名对不上就报警别让错误数据悄悄流下去。2.4 大文件读取的性能考量当 CSV 行数上万甚至几十万的时候读取方式就要讲究了。一次性把整个文件读进内存数据量大的时候会明显变慢甚至内存吃紧。影刀里如果遇到大文件我一般会考虑分批读取或者流式处理的思路要么按行读取处理完一批写一批要么先用文本方式逐行读自己解析避免一次性构建巨大的表格对象。具体怎么选看你的处理逻辑。如果只是简单的字段提取和转换逐行文本处理完全够用速度也快如果需要对整表做排序、分组这类操作那就得全量读进来这时候要评估一下数据量几十万行以内一般问题不大再大就要考虑拆分文件或者借助数据库了。我个人的经验是影刀处理十万行以内的 CSV 用专用指令问题不大超过这个量级就要留意运行时间和内存占用必要时把大文件切成小文件分批跑。3. 写入 CSV把处理结果稳稳落盘3.1 写入指令的参数配置要点写入 CSV 的指令参数和读取是对称的文件路径、编码、分隔符、是否写表头这几项要一一对应好。这里我重点说两个容易出错的。第一个是写入模式是覆盖还是追加。覆盖模式每次运行都会清空原文件重新写适合生成全新的结果文件追加模式是在文件末尾接着写适合日志类或者分批汇总的场景。选错了要么数据丢失要么重复堆积这个一定要根据业务逻辑确认清楚。第二个是表头处理。如果你的数据本身第一行就是列名写入时勾选包含表头就对了如果数据是纯记录、没有列名那就别勾否则会把第一条记录当成表头写进去数据就少了一行。我见过有人调试的时候反复运行结果文件里表头重复出现了好几次就是追加模式加包含表头一起用导致的每次追加都写一遍表头。这种问题排查起来不复杂但第一次遇到确实会懵。3.2 字段内容含特殊字符怎么办CSV 有个经典的坑字段内容本身包含逗号、双引号或者换行符。比如某个商品名称是苹果,红富士中间有个逗号如果你直接按逗号拼接写入读回来的时候这个字段就会被切成两段数据错位。标准的 CSV 规范里这种情况要用双引号把整个字段包起来字段内部的双引号则用两个双引号转义。影刀的写入指令一般会自动处理这种转义但前提是你写入的是结构化的表格数据而不是自己拼接的字符串。如果你是自己用文本方式拼 CSV 内容那就必须手动处理转义否则生成的文