仅当行不存在时才附加到csv

时间:2016-11-07 10:37:48

标签: ruby csv duplicates append unique

我的代码看起来像

CSV.open("test.csv", "a+") do |csv|
 (0..array.count).each do
  csv << [object1, object2, object3]
 end
end

假设在迭代中的某个时刻,object1的值为1object2的值为2object3的值为3
是否可以检查我的test.csv文件中是否有行

1,2,3

已经存在,所以不要再将同一行附加到我的csv文件中吗?

2 个答案:

答案 0 :(得分:2)

csv_file = 'test.csv'
existing_lines = File.readlines(csv_file).map(&:strip) # remove line breaks

CSV.open(csv_file, 'a+') do |csv|
  (0..array.count).each do
    data = [object1, object2, object3]
    str = data.join(',')
    unless existing_lines.include?(str)
      csv << data
      existing_lines << str
    end
  end
end

答案 1 :(得分:0)

这就是我的方式

    existing_dates = Array.new
    file = File.open(@renko_csv_path, "r")
    file.each_line do |a|
      fields = a.split(',')
      date = fields[0].tr_s('"', '').strip
      existing_dates.push(date)
    end
    renko_points.each do |renko_hash|
      CSV.open(@renko_csv_path,  (File.file?(@renko_csv_path) ? "ab" : "wb")) do |csv|
        if !existing_dates.include?(renko_hash[:date])
          csv << renko_hash.map { |key, value| value }
        end
      end
    end