我的问题类似于this。基本上有一个CSV文件,但有重复的PID,但我不能这样做.uniq
:
File.open("new.csv", "w+") { |file| file.puts File.readlines("old.csv").uniq }
因为线条不同。我是Ruby的新手,想知道是否有一种优雅的方法可以根据第一列删除整行?或者我是否必须遍历每一行并查找重复的PID?
答案 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