【问题标题】:Rearrange CSV, delete the old one and re-write重新排列CSV,删除旧的并重新编写
【发布时间】:2017-04-19 07:17:55
【问题描述】:

假设我有一个 CSV 文件

Name,Age
john,20
ana,30
steven,25
frank,27

如果我想根据“年龄”值按降序排列,得到这样的东西呢

Name,Age
ana,30
frank,27
steven,25
john,20

然后删除所有的 CSV 行并根据新的顺序重写它们?

我知道如何从 CSV 创建哈希并对其进行排序,但不知道如何实现所描述的结果。

【问题讨论】:

标签: ruby sorting csv hash export-to-csv


【解决方案1】:

Ruby has a CSV library。您可以使用它来读取、排序和写入 CSV 文件。 CSV 类是 CSV::Table 的包装器。 CSV::Table 处理数据本身,而CSV 主要提供从文件读取的能力。

require 'csv'
orig_table = CSV.table("test.csv");

orig_table 是一个 CSV::Table 对象。不幸的是,您不能直接对其行进行排序,但您可以将它们排序到 CSV::Row 对象的数组中,然后将其放入新的 CSV::Table 中。

sorted_rows = orig_table.sort { |a,b| b[:age] <=> a[:age] }
sorted_table = CSV::Table.new(sorted_rows)

然后您可以使用to_csv 从中获取一个CSV 字符串并将其写回文件中。

File.open("test.csv", "w").write(sorted_table.to_csv)

【讨论】:

  • @steenslag to_csvto_s 是相同的,所以省略 to_csv 依赖于 sorted_table 的默认字符串化。
猜你喜欢
  • 2016-04-27
  • 1970-01-01
  • 2011-06-25
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
相关资源
最近更新 更多