如何在 ruby 中读取没有 quote_char 的 CSV?
Posted
技术标签:
【中文标题】如何在 ruby 中读取没有 quote_char 的 CSV?【英文标题】:How can I read CSV with no quote_char in ruby? 【发布时间】:2014-06-16 03:32:10 【问题描述】:我有一个没有引号字符的 TSV 文件。每当数据中出现\t
时,它总是分隔列,而不是列值的一部分。每当出现"
时,它始终是列值的一部分,并且永远不会包含列值。
我想在 Ruby 中阅读这个 CSV,但它给了我
/Users/.rvm/rubies/ruby-1.9.3-p545/lib/ruby/1.9.1/csv.rb:1925:in `block (2 levels) in shift': Illegal quoting in line 9506. (CSV::MalformedCSVError)
我的代码是:
CSV.foreach(input_file, :col_sep => "\t", :headers => true) do |row|
puts row
end
有什么办法可以解决这个问题?
【问题讨论】:
我强烈推荐 James Edward Gray II 的 fastcsv gem。它让生活更简单。 Importing CSV quoting error is driving me nuts的可能重复 @6ftDan:Ruby 1.9.3 中的标准库 csv 是 fastercsv AFAIK。 【参考方案1】:事实证明,我可以通过输入 quote_char => "\x00"
来欺骗它认为零字节是引号字符来修复它。
【讨论】:
【参考方案2】:liberal_parsing
option 可用于此类情况。来自文档:
当设置为真值时,CSV 将尝试解析不符合 RFC 4180 的输入,例如未加引号的字段中的双引号。
在您的示例中,这将是:
CSV.foreach(input_file, :col_sep => "\t", :headers => true, :liberal_parsing => true ) do |row|
puts row
end
【讨论】:
以上是关于如何在 ruby 中读取没有 quote_char 的 CSV?的主要内容,如果未能解决你的问题,请参考以下文章