如何比较两个CSV文件中的数据

时间:2013-05-02 17:50:02

标签: ruby csv compare

我有两个具有相同结构的CSV文件,理想情况下应该具有相同的数据。

我想用Ruby比较它们中的数据,并想知道我们是否已经有相同的Ruby函数。

2 个答案:

答案 0 :(得分:4)

如果您想检查文件是否相同,只需使用identical? compare_file的别名{/ 1}}:

FileUtils.identical?('file1.csv', 'file2.csv')

如果您想查看差异,可以使用diffy

gem install diffy
puts Diffy::Diff.new('file1.csv', 'file2.csv',  :source => 'files')

它产生类似于diff的输出,可以很好地格式化为HTML:

puts Diffy::Diff.new('file1.csv', 'file2.csv',  :source => 'files').to_s(:html_simple)

答案 1 :(得分:2)

正如Summea所评论,请查看CSV类。

然后使用:

#Will store each line of each file as an array of fields (so an array of arrays).
file1_lines = CSV.read("file1.csv")
file2_lines = CSV.read("file2.csv")

for i in 0..file1_lines.size
  if (file1_lines[i] == file2_lines[i]
    puts "Same #{file1_lines[i]}"
  else
    puts "#{file1_lines[i]} != #{file2_lines[i]}"
  end
end

请注意,在Ruby中使用for非常少见。您通常在集合上使用each进行迭代,但这里有两个。

另外,请注意其中一个列表可能比另一个更长,但这应该可以帮助您开始。