85

我有一个名为“A.csv”的 CSV 文件。我需要使用来自“A.csv”的数据生成一个名为“B.csv”的新 CSV 文件。

我将使用“A.csv”中的列子集,并且必须将一列的值更新为“B.csv”中的新值。最终,我将使用 B.csv 中的这些数据来验证数据库。

  1. 如何创建新的 CSV 文件?
  2. 如何将所需列的数据从 A.csv 复制到“B.csv”?
  3. 如何为特定列附加值?

我是 Ruby 新手,但我能够读取 CSV 来获取数组或哈希。

4

3 回答 3

193

正如 mikeb 指出的那样,有文档 - http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html - 或者您可以按照下面的示例进行操作(所有这些都经过测试并且在职的):

要创建一个新文件:

在这个文件中,我们将有两行,一个标题行和一个数据行,非常简单的 CSV:

require "csv"
CSV.open("file.csv", "wb") do |csv|
  csv << ["animal", "count", "price"]
  csv << ["fox", "1", "$90.00"]
end

结果,一个名为“file.csv”的文件包含以下内容:

animal,count,price
fox,1,$90.00

如何将数据附加到 CSV

与上面的公式几乎相同,只是我们不使用“wb”模式,而是使用“a+”模式。有关这些的更多信息,请参阅此堆栈溢出答案:什么是 Ruby File.open 模式和选项?

CSV.open("file.csv", "a+") do |csv|
  csv << ["cow", "3","2500"]
end

现在,当我们打开 file.csv 时,我们有:

animal,count,price
fox,1,$90.00
cow,3,2500

从我们的 CSV 文件中读取

现在您知道如何复制和写入文件、读取 CSV 并因此获取数据以进行您刚刚执行的操作:

CSV.foreach("file.csv") do |row|
  puts row #first row would be ["animal", "count", "price"] - etc.
end

当然,这就像使用这个 gem 从 CSV 中提取信息的一百种不同方式中的一种。欲了解更多信息,我建议您既然有了入门知识就访问文档:http ://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html

于 2013-10-30T22:24:00.227 回答
4

你看过 Ruby 的 CSV 类吗?看起来还挺全面的。在这里查看: http ://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html

于 2012-10-04T00:50:10.340 回答
0

您可能希望使用它CSV::parse来帮助 Ruby 将 CSV 理解为数据表,并通过标题轻松访问值。

不幸的是,关于该方法的可用文档CSV::parse并没有很清楚地说明如何实际使用它。

我有一个类似的任务,并且通过 ruby​​guides.com 上的How to Read & Parse CSV Files With Ruby得到了更多的帮助,而不是 CSV 类文档或从这里指向它的答案。

我建议完整阅读该页面。关键部分是关于使用以下方法将给定的 CSV 转换为CSV::Table对象:

table = CSV.parse(File.read("cats.csv"), headers: true)

现在有关于class的文档CSV::Table,但是 ruby​​guides.com 页面上的清晰示例可能会再次为您提供更多帮助。我要强调的一件事是,当您告诉.parse期望标题时,结果表会将第一行数据视为 row [0]

您可能会对.by_colTable对象可用的方法特别感兴趣。这将允许您遍历输入和/或输出中的不同列索引位置,并从一个复制到另一个或向输出添加一个新值。如果我让它工作,我会回来并发布一个例子。

于 2020-03-17T22:33:40.100 回答