Ruby 1.9.3 - CSV.table 如何知道 CSV 文件中是否没有 header ?

标签 ruby csv

我一直在用 CSV.table 做一些测试。我有两个几乎相同的小 CSV 文件,但其中一个缺少标题行。

当我对带有标题行的 CSV 文件运行 CSV.table 时,一切都按预期进行。

当我针对没有标题行的 CSV 文件运行它时,我得到:

NoMethodError: undefined method `encode' for nil:NilClass

我用不同类型的数据、不同类型的 header 尝试了这个,并得到了相同的结果。

我很好奇 CSV.table 的魔力。如果我使用 CSV.parse 并将标题设置为 true,那么无论如何它总是使第一行成为标题。所以,我一直在使用 CSV.table 来检查导入的 CSV 文件是否有标题行,但我对此不太满意,因为我不知道它是否或何时会或不会按照我使用的方式工作。

begin
  CSV.table(csv_file_path)
rescue
  # Add error to log or something.
end

有人知道吗?

附言我已经通读了它以及它在每种方法上提供的源代码 - http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html

最佳答案

不涉及任何魔法,一般情况下它对您不起作用。

如你所见from the source , table 字面上只是调用 readheaders: true。但它也将 header 转换为符号 (header_converters: :symbol),这是它看起来有效的关键。

没有标题会出现错误,因为第一行数据中有一个空白列(类似于 a,b,,d,e)。空白被读入为 nil,并且由于 nil 无法转换为符号,所以它爆炸了。

尝试使用一些第一行没有空白的数据 - 您会看到 table 会像其他任何方法一样将该行数据视为标题。

关于Ruby 1.9.3 - CSV.table 如何知道 CSV 文件中是否没有 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12713410/

相关文章:

ruby - 如何使用 openssl 安装 ruby​​(rubygems)?

python - 在python中将不带文件路径的文件名添加到csv

sql - 将 CSV 文件导入 SQL Server

python - 网络抓取中的 CSV 格式问题

python - 双索引 python pandas

mysql - 存储包含200万条日志数据的大型CSV文件

ruby-on-rails - 强参数不接受数组

ruby assert_equal 未定义方法 'downcase' for 0..13 :Range

ruby-on-rails - Rails 4 - 在哪里存储临时文件?

ruby - Rails + XMPP 机器人在后台