gpt4 book ai didi

Ruby 转置 csv

转载 作者:数据小太阳 更新时间:2023-10-29 09:03:31 24 4
gpt4 key购买 nike

我正在使用 ruby​​ 和 gem nokogiri 将 html 转换为 csv,效果很好,但我也想转置数据。

我知道 ruby​​ 有一个我可以利用的转置函数,但我不确定如何将它集成到我正在使用的脚本中,因为我对 ruby​​ 不是很好。

有人可以帮我把转置代码放在这个脚本的正确位置以获得预期的效果吗?

require 'rubygems'
require 'nokogiri'

print_header_lines = ARGV[1]

File.open(ARGV[0]) do |f|

table_string=f
doc = Nokogiri::HTML(table_string)

doc.xpath('//table//tr').each do |row|
if print_header_lines
row.xpath('th').each do |cell|
print '"', cell.text.gsub("\n", ' ').gsub('"', '\"').gsub(/(\s){2,}/m, '\1'), "\", "
end
end
row.xpath('td').each do |cell|
print '"', cell.text.gsub("\n", ' ').gsub('"', '\"').gsub(/(\s){2,}/m, '\1'), "\", "
end
print "\n"
end
end

根据我在网上找到的信息,转置的脚本是这样的:

require 'CSV'

rows = CSV.new($stdin).read
puts rows.transpose.map { |x| x.join ',' }

当然,require 需要放在顶部,但我不确定在上面的示例中要更改什么才能使输出转置。

非常感谢。

最佳答案

如果你想使用转置,你需要一个二维数组。目前你只是一次打印一行。为此使用 map :

tbl_array = doc.xpath('//table//tr').map do |row|
row.xpath('td').map do |cell|
"\" #{cell_text.gsub("\n", ' ').gsub('"', '\"').gsub(/(\s){2,}/m, '\1')} \", "
end
end

tbl_array.transpose.each do |row|
row.each { |cell| print cell }
end

关于Ruby 转置 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29521170/

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