如何在Ruby中创建新的CSV文件?

use*_*712 81 ruby csv

我有一个名为"A.csv"的CSV文件.我需要使用"A.csv"中的数据生成一个名为"B.csv"的新CSV文件.

我将使用"A.csv"中的列的子集,并且必须在"B.csv"中将一列的值更新为新值.然后我使用B.csv中的这些数据在数据库中进行验证.

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

我能够读取CSV,获取数组或哈希.

new*_*ere 179

正如迈克布所指出的那样,有文档 - 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
Run Code Online (Sandbox Code Playgroud)

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

animal,count,price
fox,1,$90.00
Run Code Online (Sandbox Code Playgroud)

如何将数据附加到CSV

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

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

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

animal,count,price
fox,1,$90.00
cow,3,2500
Run Code Online (Sandbox Code Playgroud)

从我们的CSV文件中读取

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

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

当然,这就像使用这个gem从CSV中提取信息一样.有关更多信息,我建议您访问文档,因为您有一本入门书:http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html


Mik*_*keB 4

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