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

Posted

技术标签:

【中文标题】仅当行不存在时才附加到 csv【英文标题】:Append to csv only if row doesn't exist 【发布时间】:2017-03-20 16:12:30 【问题描述】:

我的代码看起来像

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 文件中?

【问题讨论】:

【参考方案1】:
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

【讨论】:

未定义方法“排除?”对于 #<...> 【参考方案2】:

这就是我的做法

    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

【讨论】:

以上是关于仅当行不存在时才附加到 csv的主要内容,如果未能解决你的问题,请参考以下文章

仅当行不存在时,如何将一行添加到不同子目录下的多个文本文件?

仅当行不存在时,如何在 SQL Server 中执行插入操作? [复制]

MYSQL - 仅当 LEFT JOIN 中的行不存在时才选择

仅当文件尚不存在时才将行附加到文件中

当行不存在时,“SELECT FOR UPDATE”是不是会阻止其他连接插入?

仅当数组列表尚不存在时才将其添加到数组列表中