我有一个名为“ A.csv”的CSV文件。我需要使用来自“ A.csv”的数据生成一个名为“ B.csv”的新CSV文件。
我将使用“ A.csv”中列的子集,并且必须将一列的值更新为“ B.csv”中的新值。最终,我将使用B.csv中的数据对数据库进行验证。
- 如何创建新的CSV文件?
- 如何将所需列的数据从A.csv复制到“ B.csv”?
- 如何为特定列附加值?
我是Ruby的新手,但是我可以读取CSV来获取数组或哈希。
我有一个名为“ A.csv”的CSV文件。我需要使用来自“ A.csv”的数据生成一个名为“ B.csv”的新CSV文件。
我将使用“ A.csv”中列的子集,并且必须将一列的值更新为“ B.csv”中的新值。最终,我将使用B.csv中的数据对数据库进行验证。
我是Ruby的新手,但是我可以读取CSV来获取数组或哈希。
Answers:
正如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
与上面几乎相同的公式只是使用“ a +”模式,而不是使用“ wb”模式。有关这些的更多信息,请参见以下堆栈溢出答案:什么是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.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
您看过Ruby的CSV类吗?似乎很全面。在此处查看:http : //ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html
您可能想要使用CSV::parse
Ruby帮助Ruby将CSV理解为它本身的数据表,并允许通过标头轻松访问值。
不幸的是,有关该CSV::parse
方法的可用文档并未明确说明如何实际使用此方法。
我有一个类似的任务,并且在rubyguides.com上如何使用Ruby读取和解析CSV文件的帮助比CSV类文档或从此处指向它的答案给了更多的帮助。
我建议您完整阅读该页面。关键部分是CSV::Table
使用以下命令将给定的CSV转换为对象:
table = CSV.parse(File.read("cats.csv"), headers: true)
现在有关于CSV::Table
class的文档,但是rubyguides.com页面上的清晰示例可能再次为您提供帮助。我要强调的一件事是,当您告诉.parse
您期望标题时,结果表会将数据的第一行视为row [0]
。
您可能会对.by_col
新Table
对象可用的方法特别感兴趣。这将允许您遍历输入和/或输出中不同的列索引位置,并从一个复制到另一个或向输出添加新值。如果可以使用,我将返回并发布示例。