我可以使用什么来在字段级别区分两个CSV文件,突出显示已更改的确切字段?假设简单的CSV格式,其中逗号仅显示为字段分隔符,而不是其他地方。
答案 0 :(得分:36)
尝试git diff
:
git diff --color-words="[^[:space:],]+" x.csv y.csv
答案 1 :(得分:18)
git diff --word-diff-regex
提供了一种在字段级别显示更改的方法。见Also use comma as a word separator in diff
此解决方案适用于显示带有数字且没有空格的CSV文件中的更改。例如,假设我们更改了一个数字
1,1,1,1,1,1,1,1
到
1,1,2,1,1,1,1,1
如果我们使用git diff --word-diff-regex="[^[:space:],]+" x.csv y.csv
,那么我们会得到:
1,1,[-1-]{+2+},1,1,1,1,1
这对于包含许多列的CSV文件非常有用。
答案 2 :(得分:1)
csvdiff
是一个用Python编写的命令行工具,用于比较字段级别的CSV文件:https://pypi.python.org/pypi/csvdiff
答案 3 :(得分:1)
您可以使用此工具https://github.com/maozza/helpers-scripts/blob/master/csv_diff.py 该脚本创建了两个文件:
field_change_sum.csv
- 包含每个字段中的更改次数
results_details.json
- 包含JSON格式的更改
答案 4 :(得分:1)
结帐csv-diff
-可从命令行使用或作为python库使用:
https://pypi.org/project/csv-diff/ https://github.com/simonw/csv-diff
考虑两个CSV文件:
one.csv
id,name,age 1,Cleo,4 2,Pancakes,2
two.csv
id,name,age 1,Cleo,5 3,Bailey,1
csv-diff
可以显示文件之间差异的易于理解的摘要:$ csv-diff one.csv two.csv --key=id 1 row changed, 1 row added, 1 row removed 1 row changed Row 1 age: "4" => "5" 1 row added id: 3 name: Bailey age: 1 1 row removed id: 2 name: Pancakes age: 2
也可以输出JSON(例如,可以通过管道传递到jq
-非常灵活)。
(注意:我不是作者!)
答案 5 :(得分:0)
结帐daff。它可以创建漂亮的彩色终端输出,还可以将diff作为html表输出。
答案 6 :(得分:0)
签出WRGL。完全公开:我是创始人。
WRGL是专门为CSV制作的完整版本控制系统。考虑使用Github,但要使用CSV。如果您已经使用过Git,则期望看到非常相似的术语,例如commits,commit message,repository和diff。
WRGL和Git之间的关键区别在于,我们对每一行(使用可选的主键)而不是每个文件进行哈希处理。与Git相比,这极大地提高了速度和准确性。
只要主键保持不变,更改就会显示到单元格级别,并且我们有一个相当精巧的Web应用程序,应该简单易用。 :)