跳到工具
ViewCSV
无需上传文件

CSV 文件校验

signups.csv· 示例数据7 行 · 6 列
列规则(可选)
规则以 Table Schema JSON(Frictionless Data)格式保存,其他工具也能读取。
4 个错误,2 个警告
报告
行列问题值
1name开头或结尾有空格。 伟 王
2email不是有效的邮箱地址。not-an-email
2signup_date不是有效的日期(YYYY-MM-DD)。2026-02-30
6email不是有效的邮箱地址。N/A
6signup_date不是有效的日期(YYYY-MM-DD)。11/03/2026
7name开头或结尾有空格。磊 杨

行号从表头之后的数据行开始计数;引号内的换行不算新行。

打开 CSV 文件即可检查结构:逐条核对每条记录的字段数是否与表头一致,检查空白和重复的列名、多余的引号、混用的换行符和空行。还可以为每列添加可选规则,例如整数、日期、邮箱、必填、唯一、允许值或正则表达式,每个问题都会列出所在的数据行、列和值。规则采用 Frictionless Table Schema 的术语。文件在你的浏览器中检查,不会上传。

如何校验 CSV 文件

  1. 打开 .csv、.tsv 或 .txt 文件。分隔符以及 UTF-8、UTF-16 的字节顺序标记(BOM)会自动识别;如果列看起来不对,请在导入设置中选择其他分隔符或旧编码(如 GBK 文件选 GB18030)。
  2. 可以填写每条记录必须具有的列数。留空时以表头的列数为准。
  3. 可以为关心的列添加规则:数据类型、是否必填、是否必须唯一、允许值、最小值和最大值、长度范围或格式模式。
  4. 运行检查并逐项处理报告:先处理错误,再处理警告。在 CSV 编辑器 中修正值,或用 CSV 数据清洗 整理,然后重新校验。

在编写规则之前,如果想先了解每列的数据类型、空值和不同值,可以用 CSV 数据分析 生成概况。

结构检查

字段数(错误)某条记录的字段数比表头(或你填写的列数)多或少。RFC 4180 要求每条记录的字段数相同;不一致通常意味着有未加引号的分隔符或缺少某个值。
空白表头(错误)某个列名为空或只有空格。报告会给出它的位置。
重复表头(错误)去除空格后有两个列名相同。报告会给出两者的位置。
多余的引号(警告)未加引号的值中出现了引号字符,例如 5" screen。值按原样保留;报告给出整个文件中的出现次数。
闭合引号后有文本(警告)闭合引号之后、下一个分隔符之前还有字符,例如 "abc"x。
混用换行符(警告)文件中的记录结尾混用了 CRLF、LF 和 CR。报告会分别统计每种的数量。
空行(警告)记录之间有空行。这些空行会被跳过,报告会统计数量。
首尾空格(警告)值的文本前后有空格。默认开启;只有空格的值不会被报告。

如果某个带引号的值一直没有闭合,检查会以错误停止,并指出它开始的那条记录,因为文件的剩余部分已无法可靠地拆分成记录。

列规则

类型:整数只能有可选的正负号和数字,例如 -12 或 007。超出 ±9,007,199,254,740,991 的值会被报告,所以长编号请改用文本规则加格式模式。
类型:数字使用小数点的普通十进制写法,例如 3.5、-0.25 或 1e3。不能有千分位分隔符、货币符号或首尾空格。
类型:布尔值true 或 false,大小写不限。1、0、yes 和 no 都会被报告。
类型:日期、日期时间必须是写成 YYYY-MM-DD 的真实日期,所以 2024-02-30 会被报告。日期时间还要带时间(2024-03-05T09:30,秒以及 Z 或 +02:00 时区偏移可选)。
类型:带格式的字符串邮箱(只做 name@domain.tld 形式的简单检查,不检测能否投递)、URI(带协议的绝对 URL)或 UUID(第 1–8 版)。
必填值不能为空。不设此规则时,空值能通过其他所有规则。
唯一该列中的值不能重复。报告会指出该值首次出现的行。空值不参与比较。
允许值值必须与所列的某个值完全相同,包括大小写和空格。
最小值、最大值整数列和数字列的边界值(含边界),日期和日期时间列则使用 ISO 日期。
最小长度和最大长度按 Unicode 字符计数,所以 é 和 日 都算一个字符。
格式模式按照 Table Schema 的要求,必须与整个值匹配的正则表达式,例如 [A-Z]{2}\d{4}。匹配区分大小写。

规则只作用于表头与规则名称完全相同的列;文件中不存在的列,其规则会被跳过。规则可以保存为 Table Schema JSON 文件,下次导出时再加载使用;加载的 Schema 中无法识别的类型和键会被忽略。

如何阅读报告

  • 行号从表头之后的数据记录开始计数(表头为第 0 行)。引号内含换行的值仍算一条记录,所以这里的行号可能与文本编辑器中的行号不同。
  • 每个问题都会注明所在列并引用该值,方便你在 CSV 在线查看 或编辑器中搜索。
  • 错误表示破坏了结构或违反了规则;警告指出的数据虽然是合法的 CSV,却经常导致导入出错。
  • 最多列出 5,000 个问题。超出部分仍会按问题类型统计总数,列表会标记为已截断。

限制与隐私

校验器每次只读取一条记录,所以超过 25 MB 交互上限的文件会在后台线程中以流式方式检查,并显示进度、可随时取消。在流式模式下,字段数少于表头的记录目前会先补齐再检查,因此只有字段数多于表头的记录会被报告为字段数错误。

校验在你的浏览器中进行,CSV 文件不会上传到服务器。

示例

用四条规则检查一份注册导出:id 是必填且唯一的整数;email 是必填的邮箱格式字符串;signup_date 是日期;plan 只允许 basic、pro 和 team。输出是校验器的报告,摘要之后每行一个问题:一个不存在的日期、一个没有域名后缀的邮箱、大小写不对的 Pro、一个重复的 id、一个缺失的邮箱,以及末尾带空格的 team ,它既触发警告,也不属于允许值。

CSV
id,email,signup_date,plan
1,ana@example.com,2024-02-30,pro
2,kim@example,2024-03-01,Pro
2,bao@example.com,2024-03-04,basic
4,,2024-03-05,team 
校验报告
{"rows":4,"errors":6,"warnings":1,"truncated":false}
{"code":"type","row":1,"column":"signup_date","value":"2024-02-30","params":{"type":"date"}}
{"code":"format","row":2,"column":"email","value":"kim@example","params":{"format":"email"}}
{"code":"enum","row":2,"column":"plan","value":"Pro","params":{"allowed":"basic, pro, team"}}
{"code":"unique","row":3,"column":"id","value":"2","params":{"first":2}}
{"code":"whitespace","row":4,"column":"plan","value":"team ","params":{}}
{"code":"required","row":4,"column":"email","value":"","params":{}}
{"code":"enum","row":4,"column":"plan","value":"team ","params":{"allowed":"basic, pro, team"}}

常见问题

为什么带空格的值会被报告为不属于允许值?

规则按值的原始写法比较,不会去除空格,所以 team 不等于 team。请用 CSV 数据清洗 去除该列的首尾空格,或修正导出设置。

校验会改动我的文件吗?

不会。它只读取文件并报告发现的问题。请在编辑器或源系统中修正。

每个月的导出能重复使用同一套规则吗?

可以。把规则保存为 Table Schema JSON 文件,下次加载即可;规则按列名与列对应。

标准与参考资料