【问题标题】:How do I tell CSV to make a column instead of a row?如何告诉 CSV 创建一列而不是一行?
【发布时间】:2012-12-22 03:48:11
【问题描述】:

我用 Nokogiri 编写了一个非常简单的程序来抓取网站并创建 CSV 文件。它正在获取正确的数据并制作 CSV,但数据被推入一个单元格 (A1),我宁愿它作为一列出现,每个值用逗号分隔。

如何告诉 CSV 为每个值创建一列,用逗号分隔,而不是将所有信息放入单个单元格?

require 'open-uri'
require 'nokogiri'
require 'csv'

doc = Nokogiri::HTML(open('somewebpage.com'))
CSV.open("webpagedata.csv", "wb") do |csv|
    data = doc.css('.information h3 a').map { |link| link['href']  }
    puts data
    csv << [data]
end

【问题讨论】:

  • 这不是 Nokogiri 问题,因为 Nokogiri 不会创建 CSV 数据。您必须将 cssmap 返回的 NodeSet 强制转换为您希望 CSV 接收的格式。

标签: ruby csv


【解决方案1】:

doc.css('.information h3 a').map { |link| link['href'] } 的结果已经是一个数组,因此当您将其添加到 CSV 文件时,您无需将其包装在 [...] 中。

换行

csv << [data]

csv << data

CSV 库主要处理行,所以如果你想创建一个 column 而不是 row,那么你需要为列的每个条目:

CSV.open("webpagedata.csv", "wb") do |csv|
  data = doc.css('.information h3 a').map { |link| link['href']  }
  data.each do |entry|
    csv << [entry]
  end
end

请注意,在这种情况下,您确实需要在entry 周围添加[...],因为您需要添加一个数组而不是单个项目。

【讨论】:

  • 这成功了!它将我的所有数据连续放入单独的单元格中,并且在 Excel 中将其设为一列相当简单。谢谢!我试图支持你的答案,但我没有足够的声誉。原谅我的笨拙。
  • @Guyana.Hand 我添加了一种可以直接创建列的方法
猜你喜欢
  • 2013-07-22
  • 1970-01-01
  • 2023-03-31
  • 2017-11-15
  • 1970-01-01
  • 2023-03-23
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多