3

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

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

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

4

2 回答 2

8

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

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

uniq文档中所述。

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

于 2012-07-16T15:54:55.697 回答
4

假设 pid 是第二列:

CSV.open('new.csv', 'w') do |csv|
  CSV.read('old.csv').uniq{|x| x[1]}.each do |row|
    csv << row
  end
end
于 2012-07-17T05:23:37.603 回答