根据Ruby中的列删除重复项

时间:2012-07-16 15:37:14

标签: ruby csv duplicate-removal

我的问题类似于this。基本上有一个CSV文件,但有重复的PID,但我不能这样做.uniq

File.open("new.csv", "w+") { |file| file.puts File.readlines("old.csv").uniq }

因为线条不同。我是Ruby的新手,想知道是否有一种优雅的方法可以根据第一列删除整行?或者我是否必须遍历每一行并查找重复的PID?

2 个答案:

答案 0 :(得分:8)

您可以传递uniq一个块来指定它将删除重复元素的要求。

File.open("old.csv", "w+") do |file|
  file.puts File.readlines("csv.csv").uniq! { |s| s[/^\d+/ ] }
end

正如uniq documentation中所述。

由适合您的任何人替换/^\d+/正则表达式。

答案 1 :(得分:3)

让我们说pid是第二列:

CSV.open('new.csv', 'w') do |csv|
  CSV.read('old.csv').uniq{|x| x[1]}.each do |row|
    csv << row
  end
end