使用更智能的csv gem并在块中处理csv - 我需要通过将键/值与另一个csv(1 GB)进行比较来从大型csv(2GB)中删除行

时间:2017-01-09 03:04:49

标签: ruby csv smartercsv

以下是我使用过的代码。当Main.csv中“name”col的值等于Sub.csv中“name”col的值时,我无法从Main.csv中删除行。请帮我一下。我知道我错过了什么。提前致谢。

require 'rubygems'
require 'smarter_csv'
main_csv = SmarterCSV.process('Main.csv', {:chunk_size => 100}) do |chunk|
short_csv = SmarterCSV.process('Sub.csv', {:chunk_size => 100}) do |smaller_chunk|
    chunk.each do |each_ch|
        smaller_chunk.each do |small_each_ch|
                each_ch.delete_if{|k,v| v == small_each_ch[:name]}

        end
    end
end

1 个答案:

答案 0 :(得分:0)

这是smarter_csv ..

的一个非标准方案
  

Sub.csv有2000行。而Main.csv有大约100万行。

如果你需要决定是否两个文件中都出现name,那么你可以这样做:

1)首先阅读Sub.csv文件,然后将name的值存储在数组sub_names

2)打开result.csv文件的输出文件

3)读取Main.csv文件,处理成块,    如果名称未出现在数组sub_names

中,则将每行的数据写入result.csv文件

4)关闭输出文件 - est voila!