【问题标题】:Change the format of csv file with Ruby使用 Ruby 更改 csv 文件的格式
【发布时间】:2015-09-30 20:30:30
【问题描述】:

我做了一些研究,但找不到更好的解决方案来更改 csv 文件的格式。 我想将csv文件的行转换为列,并将列转换为行。

例如:

原始 csv 文件:

a,b,c,d,e,f,g
1,2,3,4,5,6,7
7,6,5,6,4,2,1

我想把上面的文件转换成

a,1,7
b,2,6
c,3,5
d,4,4
e,5,3
f,6,2
g,7,1

有没有更简单的解决方案?

【问题讨论】:

  • 最简单:只需进行转换。 open_csv.process { |nya| out }
  • @Smar 谢谢,我无法从 ruby​​ 1.9.3 的文档中找到 .process。我必须使用这个版本的红宝石。此版本是否可用。
  • “找不到更好的解决方案” / “有没有更简单的解决方案?” - 比什么更好更容易?请展示您到目前为止所做的尝试。
  • @Stefan 不好意思提问的方式,下次我会提供详细信息。
  • @Rustam 毫不犹豫地编辑您的问题,无论您是否接受了答案。如果您已经找到了转置 CSV 文件的方法,请分享。它对未来的访问者很有帮助和价值。

标签: ruby csv


【解决方案1】:

所以你想转置这些数据

transposed = CSV.read("path/to/file.csv").transpose

CSV.open("path/to/file.csv", "w") do |csv|
  transposed.each do |row|
    csv << row
  end
end
  1. 读取数据
  2. 转置它 - Ruby 1.9.3 应该知道#transpose
  3. 写回去

这很简单,只要您的 csv 不是太大而无法一次读取。

如果是这样的话,那就太可怕了。如果是这种情况,请参阅this question 的答案。

【讨论】:

  • 我想知道一个文件太大而不能像这样打开的行长:)
  • @SergioTulentsev 我不太明白你的意思,我将整个文件读入内存,因为需要调用#transpose。如果文件权重很少,很可能会产生意外结果。现在,在一个文件中保存这么多数据是个坏主意,但这种事情时不时会发生。
  • @Borsunho 谢谢你的作品,正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2015-09-27
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多