gpt4 book ai didi

ruby - 导入 CSV 引用错误让我抓狂

转载 作者:数据小太阳 更新时间:2023-10-29 06:29:57 25 4
gpt4 key购买 nike

尝试在 ruby​​-1.9.2 中导入 CSV 文件的过程令人难以置信。

我要解析的文件有:

  • 列中的逗号
  • 列内引用
  • 使用“@”作为 :col_sep

csv.txt(代表输入,真正的是101k行):

㔾@㔾@jié@"seal" radical in Chinese characters, (Kangxi radical 26)

我的代码:

require 'csv'

CSV.foreach("/Users/adam/Desktop/csvtest.txt", {:col_sep => "@"}) do |row|
puts row.to_s
end

我想要的输出:

["㔾", "㔾", "jié", "\"seal\" radical in Chinese characters, (Kangxi radical 26)"]

我得到的输出:

CSV::MalformedCSVError: Unclosed quoted field on line 1.
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1910:in `block in shift'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1825:in `loop'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1825:in `shift'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1767:in `each'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1202:in `block in foreach'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1340:in `open'
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/CSV.rb:1201:in `foreach'
from (irb):31
from /Users/adam/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>'

它说有未关闭的引号字段,但我可以看到引号打开和关闭。

转义引号没有任何作用。我得到同样的错误 (...@""seal""r...)。将它们更改为单引号使其有效 (...@'seal' r...)。问题是我需要它们用双引号引起来。

有什么想法吗?

最佳答案

我认为问题在于 CSV 试图将 "seal" 解释为单引号列;但是,它不会显示为 @"seal"@ 因此解析器会感到困惑,因为引号应该包含在列周围。我没有看到任何选项可以告诉 CSV 列未被引用,但您可以通过将 :quote_char 设置为永远不会发生的内容来绕过它。如果您使用的是 UTF-8,那么您可以安全地使用零字节作为“永远不会出现的引号字符”:

CSV.foreach(filename, :col_sep => "@", :quote_char => "\x00") do |row|
#...
end

只要您没有引用任何专栏,这就应该有效。

关于ruby - 导入 CSV 引用错误让我抓狂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8073920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com