CSV.read x行中的非法引用

JZ.*_*JZ. 37 ruby csv formatting

我正在使用带有大量数据的ruby CSV.read.库有时会遇到格式不正确的行,例如:

"Illegal quoting in line 53657."
Run Code Online (Sandbox Code Playgroud)

忽略该行并跳过它,然后遍历每个csv并修复格式将更容易.我怎样才能做到这一点?

Ray*_*ter 73

我有这样的问题 123,456,a"b"c

问题是CSV解析器在"出现时期望完全包围逗号分隔的文本.

解决方案使用引号字符除了"我确信不会出现在我的数据中:

CSV.read(filename, :quote_char => "|")

  • 对于我的数据,我不确定哪些字符不会出现,但它显然适用于不可打印的字符,如`quote_char:"\ x00"`. (19认同)
  • 在请求者的情况下,他特别有大量数据,只想跳过错误。不过,更改 :quote_char 只是帮助我解决了我的情况。 (2认同)

Wil*_*den 18

liberal_parsing对于这样的情况,可以从Ruby 2.4开始提供该选项.从文档:

设置为true值时,CSV将尝试解析与RFC 4180不符的输入,例如未加引号的字段中的双引号.

要启用它,请将其作为CSV read/parse/new方法的选项传递:

CSV.read(filename, liberal_parsing: true)
Run Code Online (Sandbox Code Playgroud)


Dig*_*oss 5

不要让 CSV 读取和解析文件。

只需自己阅读文件并将每一行交给CSV.parse_line,然后rescue抛出任何异常。


Tom*_*art 5

尝试强制双引号字符"作为引号字符:

require 'csv'
CSV.foreach(file,{headers: :first_row, quote_char: "\x00"}) do |line|
  p line
end
Run Code Online (Sandbox Code Playgroud)