要合并 CSV 文件,添加两个或更多文件,再选择合并方式。“上下拼接行”把所有文件的行依次叠成一张表,并按列名对齐,因此只有部分文件才有的列也会保留,其他文件对应的位置留空;合并每月或各地区的导出文件,通常指的就是这种方式。“按关键列关联”按一个或多个关键列把两个文件左右拼接,作用类似电子表格中的 VLOOKUP 查找,并告诉你匹配了多少行、哪些关键值重复、因此多出了多少行。调整选项时,合并后的表格会实时更新;文件在你的浏览器中合并,不会上传。
如何合并 CSV 文件
- 添加文件。每个文件都会自动识别分隔符和编码,并把第一行当作表头。列表中会显示每个文件的行数和前几列;上下移动文件即可调整顺序。
- 选择“上下拼接行”,把各文件的行一个接一个排在一起;或选择“按关键列关联”,按关键列匹配前两个文件中的行。
- 检查预览及其上方的提示,然后把结果下载为 CSV,或在 CSV 编辑器 中打开继续处理。
行的顺序与文件列表一致:先是第一个文件的所有行,再是第二个文件的所有行,依此类推。如果要合并很多份月度导出,可以一次全部添加,并开启来源列,这样每一行都能看出来自哪个文件。
上下拼接:合并列不同的文件
上下拼接有三种列对齐方式,请根据文件之间的差异选择。
| 按列名对齐(保留所有列,默认) | 结果包含所有文件中的所有表头,按首次出现的顺序排列。如果某个文件缺少某列,它的行在该列为空。列名必须完全相同:SKU 和 sku 会成为两列。 |
|---|---|
| 要求列完全相同 | 只要有文件的表头在名称、数量或顺序上不同,就报错停止,并指出第一个不一致的文件。适合所有文件都应来自同一种导出的情况:某列被改名,就说明出了问题。 |
| 按位置对齐 | 第 1 列对第 1 列,依此类推。表头取自列数最多的文件;列数较少的文件在末尾补空值。只有在文件没有可用的表头,或布局相同但列名不同时才使用。 |
| 添加一列记录每行的来源文件名 | 在最后添加一列,默认名为 source_file(可以修改),记录每一行所属的文件名。这个名称不能与已有表头相同。 |
| 删除完全重复的行 | 拼接完成后,删除与前面某行完全相同的行,并报告删除了多少行。保留第一次出现的那一行。各值必须完全相同,包括大小写和空格;比较时忽略来源列,所以两个文件中的同一行也算重复。 |
如果某个文件多出一列或列顺序不同,按位置对齐会把值放到错误的表头下:在下面的示例中,四月文件的 qty 就会落到 name 下面。只要文件有表头,按列名对齐就能避免这个问题。
关联:按关键列合并两个文件
关联使用列表中的前两个文件,分别作为左表和右表。选择一对或多对关键列;每对的列名可以不同,例如左表的 customer_id 对应右表的 id。有多对关键列时,只有每一对都匹配,这一行才算匹配。
| 左连接(第一个文件的所有行,默认) | 保留左表的每一行;关键值匹配时填入右表的列,不匹配时留空。 |
|---|---|
| 内连接(仅两个文件都有的行) | 只保留关键值能在右表中找到的左表行。 |
| 右连接(第二个文件的所有行) | 保留右表的每一行:匹配的行按左表顺序排列,之后是没有匹配的右表行。 |
| 全连接(两个文件的所有行) | 保留两个文件的所有行:先是左连接的结果,再是没有匹配的右表行。 |
| 关键列忽略大小写和首尾空格 | C02 能与 c02 匹配。写入结果的是左表中的关键值文本。 |
结果先包含左表的所有列,再包含右表中除关键列以外的列。如果右表的某个列名已被使用,会加上 (2),例如 total (2),提示中会列出被重命名的列。对于没有匹配的右表行,其关键值写入左表的关键列,其他左表列留空。
如果某个关键值在右表中出现多次,每个匹配的左表行都会按匹配次数重复。提示会统计匹配的行、仅在左表的行、仅在右表的行、两边各自重复的关键值,以及因此多出的行数;本该一对一的查找如果并非一对一,一眼就能看出来。
值、表头和不同的分隔符
- 所有值都是文本,并按原样保留,所以
00123保留前导零。关键值也按文本比较:即使忽略大小写和空格,00123和123也不匹配。 - 值内被引号括起的分隔符、引号和换行按 RFC 4180 读取,下载时在需要处重新加上引号。
- 在同一个文件内,空白表头会变成
Column 3,重复表头变成name (2)。这些生成的名称和其他列名一样参与按列名对齐。 - 各文件可以使用不同的分隔符和编码,每个文件分别识别。下载的文件以逗号分隔,换行符和编码与列表中的第一个文件一致。浏览器无法写出的编码(例如 Shift_JIS、GB18030)会保存为 UTF-8。
拼接与关联时的常见问题
- 同一列出现了两次,名称略有不同。各文件中的表头拼写不一致(
Email和email,或末尾多了空格)。合并前用 重命名和调整 CSV 列顺序 统一其中一个的列名;如果布局完全相同,也可以改用按位置对齐。 - 关联几乎没有匹配上。检查两个文件中关键值的写法是否一致:前导零、前缀和空格都会影响匹配。开启忽略大小写和首尾空格,或先用 清洗 CSV 数据 去除该列的首尾空格。
- 关联结果的行数比左表多。右表中有重复的关键值;提示会显示有多少个关键值重复、因此多出了多少行。请删除重复项,或选择更精确的关键列配对。
- 合并后的表格超出了浏览器限制。结果最多 10 万行、200 万个单元格。请先 筛选 输入文件,或每次少合并几个文件。
合并的限制与隐私
每个文件最大 25 MB、10 万行、250 列和 200 万个单元格,拼接或关联后的结果同样限制在 10 万行和 200 万个单元格以内。合并不采用流式处理:所有文件都会载入内存。
文件在当前标签页的后台线程中读取,并在你的浏览器中合并,不会发送到任何服务器。如果要找出同一文件两个版本之间的差异,而不是把它们合在一起,请使用 对比 CSV 文件;要把一个文件拆成几份,请使用 拆分 CSV 文件。
示例:上下拼接两份列不同的库存文件
两份列不同的库存导出,按列名上下拼接,并开启来源列。name 和 warehouse 只存在于其中一个文件,所以另一个文件的行在这两列为空;SKU 保留了前导零。
march.csv sku,name,qty 00123,"Desk lamp, brass",4 00456,Shelf,2 april.csv sku,qty,warehouse 00789,10,North 00456,2,
sku,name,qty,warehouse,source_file 00123,"Desk lamp, brass",4,,march.csv 00456,Shelf,2,,march.csv 00789,,10,North,april.csv 00456,,2,,april.csv
常见问题
能关联两个以上的文件吗?
一步做不到。关联只使用列表中的前两个文件。请下载或打开结果,再与下一个文件关联。上下拼接没有这个限制,添加多少个文件就拼接多少个。
删除重复行只比较关键列吗?
不是。只有每个值都与前面某一行完全相同时,这一行才会被删除。如果要每个 ID 只保留一行,请把结果放到 清洗 CSV 数据 中,按关键列删除重复行。
为什么按位置对齐把值放到了错误的表头下?
按位置对齐会忽略列名,并采用列数最多的文件的表头。如果某个文件有其他文件没有的列,后面的值都会错位。请改用按列名对齐。