2017-04-04 157 views
-2

我想删除两列中具有相同值的CSV行。 uniq可以作为一个块进行传递,但我不能弄清楚:删除CSV文件中的重复行

CSV.open("csv/competition-duped.csv", 'w') do | csv | 
    CSV.read(file).uniq{ | column | column.values_at(column[ 3 ], column[ 7 ]) }.each do | row | 
    csv << row 
    end 
end 

此外到这一点,我可能已经找到了解决方案。

CSV.read(file).uniq{ | column | [ column[ 3 ], column[ 7 ] ] }.each do | row | 
+0

为什么向下票呢? –

+0

你可以用一些重复的行添加csv文件的提取吗? –

回答

1

您可以管理两个文件,包含数据的主文件以及您要写入所需数据的输出文件。

require 'csv' 

main = CSV.read('csv/competition-duped.csv') 
unwanted = nil 

# Open the out file in write file mode 
CSV.open('csv/out.csv', 'w') do |csv| 
    # Add the headers of the main csv file 
    csv << main.shift 
    # Iterate for every row in your original csv file 
    main.each do |data| 
    # Check for duplicated data 
    if data[0] != unwanted 
     unwanted = data[0] 
     # If isn't then write in the out file the data 
     csv << data 
    end 
    end 
end 

我试图做一个短的路,我得到这个:

# Open the out file in write file mode 
CSV.open('csv/out.csv', 'w') do |csv| 
    CSV.read('csv/competition-duped.csv').uniq.each { |r| csv << r } 
end