2017-04-04 180 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