从CSV文件中提取x行,并在此过程中将其从CSV中删除



我需要解析用户输入的CSV文件并上传所述CSV文件的片段。我想从表中取出前5行,并在此过程中删除它们。

我正在查看Ruby CSV文档,但似乎找不到任何能满足我需求的东西。

我正在寻找类似Hashdelete方法的东西,但适用于CSV。这对Ruby来说存在吗?

CSV.foreach(csv_path, headers: false).take(5)

这几乎是我想要的,但在此过程中我还需要从表中删除这些行。

创建一个CSV文件进行说明。

File.write('t.csv', <<~END
Now,is,the
time,for,all
good,Rubiests,to
come,to,the
aid,of,their
bowling,team,.
END
)

让我们看看。

puts File.read('t.csv')
Now,is,the
time,for,all
good,Rubiests,to
come,to,the
aid,of,their
bowling,team,.

然后,如果要跳过其索引在范围rng中的行,

require 'csv'
rng = 1..3
CSV.foreach('t.csv').reject.with_index { |_,i| rng.cover?(i) }
#=> [["Now", "is", "the"],
#    ["aid", "of", "their"],
#    ["bowling", "team", "."]]

如果需要,请使用select而不是reject

更一般地,如果要跳过索引在数组arr中的行,则

arr = [1, 3, 4]
CSV.foreach('t.csv').reject.with_index { |_,i| arr.include?(i) }
#=> [["Now", "is", "the"],
#    ["good", "Rubiests", "to"],
#    ["bowling", "team", "."]]

也可以写以下内容。

arr = [1, 3, 4]
x, y = CSV.foreach('t.csv').partition.with_index { |_,i| arr.include?(i) }
x #=> [["time", "for", "all"], ["come", "to", "the"], ["aid", "of", "their"]] 
y #=> [["Now", "is", "the"], ["good", "Rubiests", "to"], ["bowling", "team", "."]] 

相关内容

  • 没有找到相关文章

最新更新