私の質問はこれに似ています。基本的にCSVファイルがありますが、PIDが重複していますが、次のようにすることはできません.uniq
。
File.open("new.csv", "w+") { |file| file.puts File.readlines("old.csv").uniq }
線が違うので。私はRubyを初めて使用し、最初の列だけに基づいて行全体を削除するエレガントな方法があるかどうか疑問に思っていましたか?または、各行を調べて重複するPIDを探す必要がありますか?
私の質問はこれに似ています。基本的にCSVファイルがありますが、PIDが重複していますが、次のようにすることはできません.uniq
。
File.open("new.csv", "w+") { |file| file.puts File.readlines("old.csv").uniq }
線が違うので。私はRubyを初めて使用し、最初の列だけに基づいて行全体を削除するエレガントな方法があるかどうか疑問に思っていましたか?または、各行を調べて重複するPIDを探す必要がありますか?
ブロックを渡しuniq
て、重複した要素を削除する要件を指定できます。
File.open("old.csv", "w+") do |file|
file.puts File.readlines("csv.csv").uniq! { |s| s[/^\d+/ ] }
end
uniq
ドキュメントで説明されているとおりです。
/^\d+/
正規表現をあなたに合った人に置き換えてください。
pid が 2 番目の列であるとしましょう:
CSV.open('new.csv', 'w') do |csv|
CSV.read('old.csv').uniq{|x| x[1]}.each do |row|
csv << row
end
end