如何编写不带标题的CSV

时间:2018-06-19 23:44:07

标签: ruby csv

我有一个看起来像这样的文件:

milk 7,dark 0,white 0,sugar free 1
milk 0,dark 3,white 0,sugar free 0
milk 0,dark 3,white 0,sugar free 5
milk 0,dark 1,white 5,sugar free 3

该CSV文件中没有标题。但是,每次我在Numbers之类的程序中打开此文件时,它看起来都像这样:

enter image description here

这是我将数据写入CSV的问题还是CSV程序的问题...可能是因为分隔符的选择错误。

我写的代码如下:

def self.write(output_path:, data:, write_headers: false)
    CSV.open(output_path, "w", write_headers: write_headers) do |csv|
      data.each do |row|
        csv << row
      end
    end
  end

write_headers部分甚至可以做什么?

2 个答案:

答案 0 :(得分:1)

  

这是我将数据写入CSV的问题还是CSV程序的问题...可能是因为分隔符的选择错误。

您的CSV数据非常好。 CSV只是一个宽松的标准,没有在文件中标记标题行的概念。在语法上无法将其与任何其他行区分开。

  

write_headers部分甚至可以做什么?

它与headers一起使用。来自CSV.new的文档:

  

:write_headers
  设置true:headers时,标题行将添加到输出中。

示例:

require 'csv'

CSV.generate(headers: %w[a b c], write_headers: true) do |csv|
  csv << [1, 2, 3]
  csv << [4, 5, 6]
end
#=> "a,b,c\n1,2,3\n4,5,6\n"

相对于:

CSV.generate(headers: %w[a b c], write_headers: false) do |csv|
  csv << [1, 2, 3]
  csv << [4, 5, 6]
end
#=> "1,2,3\n4,5,6\n"

答案 1 :(得分:0)

<video video-player src="https://upload.wikimedia.org/wikipedia/commons/transcoded/a/a4/BBH_gravitational_lensing_of_gw150914.webm/BBH_gravitational_lensing_of_gw150914.webm.480p.webm" autoplay controls></video>设置为true时,将在输出中添加标题行。我认为在选项哈希中设置write_headers可以解决您的问题(当设置为true时,它将CSV的第一行作为标题)