【发布时间】:2015-06-26 18:27:39
【问题描述】:
我收到了一个需要更新的 CSV 文件。在当前状态下,它存储了超过 13,000 个文件的名称和上传日期,但是许多条目是重复的。如果文件名的前九位数字相同,则条目被认为是重复的,但是我想保留每个重复项的最新副本。我一直在开发一个 Ruby 程序,该程序将创建一个新的 CSV 文件,其中包含需要删除的所有重复文件名,但我对 Ruby 的经验很少(不到一周),所以我很挣扎。包含所有文件的原始 CSV 已按文件名排序,因此重复项彼此相邻,因此我编写了以下代码:
require 'rubygems'
require 'csv'
updated_name = "FilesToDelete.csv"
previous = nil
filenames = CSV.read('All_filenames.csv')
duplicates = []
CSV.open(updated_name, "w") do |files|
files << filenames.shift
filenames.each do |row|
next if row[0] == previous #This is where I don't know how to compare only first nine characters of the string
previous = row[0]
files << row
end
end
我真的不知道如何使用 Ruby 来完成这项任务,所以这段代码可能非常错误。如果您知道这样做的方法,任何帮助将不胜感激。我用这个线程走了这么远:ruby CSV duplicate row parsing
【问题讨论】:
-
这个 csv 文件,每行是否包含一个文件名(仅此而已)?
-
我会为此使用一个小型 SQLite 数据库。这将允许您轻松加载 CSV、更新它、删除重复并输出带有文件最新时间戳的 CSV。
-
@steenslag 没有 8 列,包括创建日期等,但其他列对于每个文件都相同或不需要。我只是想包含在新 CSV 中创建的文件名和日期。
标签: ruby-on-rails ruby csv