仅当行不存在时才附加到 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
的值为 1
,object2
的值为 2
,object3
的值为 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 中的行不存在时才选择