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

Ruby 使用更智能的csv gem并将csv分块处理-我需要通过将键/值与另一个csv(1 GB)进行比较,从大型csv(2GB)中删除行,ruby,csv,smartercsv,Ruby,Csv,Smartercsv,下面是我使用的代码。当Main.csv中“name”列的值等于Sub.csv中“name”列的值时,我无法从Main.csv中删除行。请帮我做同样的事。我知道我错过了什么。提前谢谢 require 'rubygems' require 'smarter_csv' main_csv = SmarterCSV.process('Main.csv', {:chunk_size => 100}) do |chunk| short_csv = SmarterCSV.process('Sub.csv'

下面是我使用的代码。当Main.csv中“name”列的值等于Sub.csv中“name”列的值时,我无法从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

结束

对于
smarter\u csv
,这是一个有点非标准的场景

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

如果您只需要确定
名称是否同时出现在两个文件中,则可以执行以下操作:

1) 首先读取Sub.csv文件,将
name
的值存储在数组
Sub_name

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

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


4) 关闭输出文件-看哪

对于
smarter\u csv
,这是一个有点非标准的场景

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

如果您只需要确定
名称是否同时出现在两个文件中,则可以执行以下操作:

1) 首先读取Sub.csv文件,将
name
的值存储在数组
Sub_name

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

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


4) 关闭输出文件-看哪

SmarterCSV不支持更新CSV文件。因此,是否有其他方法可以在不影响内存的情况下删除大型CSV文件行。您是否有一个示例,例如2个CSV,每个CSV有10行,您希望保留的行的示例,以及您希望删除的行?Sub.CSV有多少行包含?@sam然后简单地遍历
Sub.csv
,并将每个
:name
字段存储在一个数组中。然后,遍历
Main.csv
,并输出先前创建的数组中不包含
:name
字段的每一行。SmarterCSV不支持更新csv文件。那么,有没有其他方法,可以在不影响内存的情况下删除大型csv文件行。您有没有示例,假设有两个csv,每个csv有10行,以及您想要保留的行的示例和您想要删除的行。“Sub.csv”包含多少行?@sam然后简单地遍历
Sub.csv
,并将每个
:name
字段存储在一个数组中。然后,遍历
Main.csv
,并输出先前创建的数组中未包含
:name
字段的每一行。