在字段级别区分CSV文件的工具?

时间:2013-05-29 01:22:49

标签: csv diff

我可以使用什么来在字段级别区分两个CSV文件,突出显示已更改的确切字段?假设简单的CSV格式,其中逗号仅显示为字段分隔符,而不是其他地方。

7 个答案:

答案 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应用程序,应该简单易用。 :)