【发布时间】:2021-10-06 20:58:00
【问题描述】:
原谅我,因为我对 ruby 很陌生,但我有两个 CSV,我想比较两个 CSV 文件,如果 CSV2 中的某些内容与 CSV1 中的键匹配,我想从 CSV1 中删除该行
CSV(包含大量编辑)例如:
# csv1
xyz_id,first_nm,last_nm
100001,Person,one
200002,Person,two
300003,Person,three
400001,Person,four
500001,Person,five
#csv2
id,name,first_name,last_name,address .....
1234,person,wun
1235,person,tuh who
1236,person,tree
100001,Person,one
如果在 csv2 中有匹配的内容,请从 CSV1 中删除整行。
这是我尝试过的:
我在另一个问题中看到我可以利用 delete_if 的用法,但我对它的实现有点困惑。但是,这是我的代码:
csv1 = CSV.table('./csv/csv1.csv', headers: true)
csv2 = CSV.table('./csv/csv2.csv', headers: true)
csv1.delete_if do |csv1row|
csv2.each do |csv2row|
csv1row[:xyz_id] == csv2[:id]
end
end
我也不确定这是否有效。我必须写回csv1吗?或为此创建一个全新的 CSV?是否可以将其写回 csv1 如果 东西已被删除?
【问题讨论】:
-
在给出任何示例时,基本规则是显示您想要返回的 Ruby 对象。 CSV 文件没有“密钥”。如果该行中任何字段的值等于第二个文件中任何行的相应字段的值,您的意思是要删除第一个文件中的该行吗?