首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用Ruby将列头写入csv文件?

如何用Ruby将列头写入csv文件?
EN

Stack Overflow用户
提问于 2013-04-09 23:23:43
回答 3查看 35.4K关注 0票数 28

我在使用Ruby将列写入csv文件时遇到了问题。下面是我的代码片段。

代码语言:javascript
复制
 calc = numerator/denominator.to_f
 data_out = "#{numerator}, #{denominator}, #{calc}"
 File.open('cdhu3_X.csv','a+') do|hdr|
      hdr << ["numerator","denominator","calculation\n"] #< column header
          hdr << "#{data_out}\n"
 end

代码将列标题添加到每一行,我只需要在每列数据的顶部添加它。我在这里和其他地方都找过了,但找不到一个明确的答案。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2013-04-10 05:25:59

我建议使用CSV-library:

代码语言:javascript
复制
require 'csv'

CSV.open('test.csv','w', 
    :write_headers=> true,
    :headers => ["numerator","denominator","calculation"] #< column header
  ) do|hdr|
  1.upto(12){|numerator|
    1.upto(12){ |denominator|
      data_out = [numerator, denominator, numerator/denominator.to_f]
      hdr << data_out
    }
  }
end

如果您不能使用w选项,而您确实需要a+ (例如,数据不是一次全部可用),那么您可以尝试以下技巧:

代码语言:javascript
复制
require 'csv'

column_header = ["numerator","denominator","calculation"]
1.upto(12){|numerator|
  1.upto(12){ |denominator|
    CSV.open('test.csv','a+', 
        :write_headers=> true,
        :headers => column_header
      ) do|hdr|
          column_header = nil #No header after first insertion
          data_out = [numerator, denominator, numerator/denominator.to_f]
          hdr << data_out
        end
  }
}
票数 56
EN

Stack Overflow用户

发布于 2013-04-10 00:18:29

要做到这一点,最干净的方法是在'w'模式下打开文件一次,写入头文件,然后写入数据。

如果有一些技术原因无法做到这一点(例如,数据不是一次全部可用),那么您可以在文件上使用IO#tell方法来返回当前文件位置。当您打开要附加的文件时,位置将设置为文件的末尾,因此,如果当前文件位置为零,则该文件是新创建的且没有标头:

代码语言:javascript
复制
File.open('cdhu3_X.csv', 'a+') do |hdr|
  if hdr.tell() == 0  # file is empty, so write header
    hdr << "numerator, denominator, calculation\n"
  end
  hdr << "#{data_out}\n"
end
票数 7
EN

Stack Overflow用户

发布于 2016-01-13 00:55:39

处理csv文件的最好方法是使用Ruby的CSV模块。

在阅读CSV代码后,我遇到了同样的问题,我发现这个解决方案是最有效的。

代码语言:javascript
复制
headers = ['col1','col2','col3']

CSV.open(file_path, 'a+', {force_quotes: true}) do |csv|
  csv << headers if csv.count.eql? 0 # csv.count method gives number of lines in file if zero insert headers
end
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15905985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档