给定以下CSV文件,如何删除包含列“foo”中单词'true'的所有行?
理想情况下,我只需从CSV中删除有问题的行,就像这样:
看了一下ruby文档,好像
Date,foo,bar
2014/10/31,true,derp
2014/10/31,false,derp
我已经有一个可行的解决方案,不过需要创建一个名为csv_no_foo
的二次CSV对象。
@csv = CSV.read(@csvfile, headers: true) #http://bit.ly/1mSlqfA
@headers = CSV.open(@csvfile,'r', :headers => true).read.headers
# Make a new CSV
@csv_no_foo = CSV.new(@headers)
@csv.each do |row|
# puts row[5]
if row[@headersHash['foo']] == 'false'
@csv_no_foo.add_row(row)
else
puts "not pushing row #{row}"
end
end
理想情况下,我只需从CSV中删除有问题的行,就像这样:
...
if row[@headersHash['foo']] == 'false'
@csv.delete(true) #Doesn't work
...
看了一下ruby文档,好像
row
类有一个delete_if
函数。我对这个函数的语法感到困惑。有没有一种方法可以在不创建新csv对象的情况下删除行?
http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Row.html#method-i-each
awk
也许也可以。 - Jared Beckawk
不是一个好选择,因为,
可能是分隔符或带引号值的一部分。 - Jared Beck