【问题标题】:CSV objects in Ruby. What are they exactly?Ruby 中的 CSV 对象。它们到底是什么?
【发布时间】:2014-11-23 22:07:20
【问题描述】:

所以我有这段代码:

data = CSV.open(filename, headers: true, header_converters: :symbol)
    @contents = data.map

filename 是文件的路径,指的是我计算机上的实际文件。

我的问题是我命名为 data 的 CSV 对象到底是什么?一个对象如何映射?

当我使用 pry 进行调试时,我看到了这个:

[1] pry(#<Session>)> data  

=> <#CSV io_type:File io_path:"./data/event_attendees.csv" encoding:UTF-8 lineno:2 col_sep:"," row_sep:"\n" quote_char:"\"" headers:[:_, :regdate, :first_name, :last_name, :email_address, :homephone, :street, :city, :state, :zipcode]>  

[2] pry(#<Session>)> row 

CSV::Row _:"1" regdate:"11/12/08 10:47" first_name:"Allison" last_name:"Nguyen" email_address:"arannon@jumpstartlab.com" homephone:"6154385000" street:"3155 19th St NW" city:"Washington" state:"DC" zipcode:"20010"

所以 data 似乎是指一个 CSV 对象而不是一个数组。 row 似乎是指 csv 对象的某些属性?

不管怎样,我以前从未见过对象上的方法映射。怎么回事?

【问题讨论】:

  • 我不确定您的问题是什么。你问对象是什么?您是否尝试对 CSV 文件做一些您无法弄清楚的事情?如果是这样,期望的输出是什么

标签: ruby pry


【解决方案1】:

map 适用于包含 Enumerable 混合的任何对象。为了使用Enumerable,该类需要提供each——这是所有其他好方法的基础。 CSV 类的对象符合这种模式,正如您在 the documentation for the class 中看到的那样。

(它不直接将其推入数组的原因是因为能够逐行读取输入文件而不是在对它进行任何操作之前将整个内容存储在内存中。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 2017-10-12
    • 2010-12-20
    • 1970-01-01
    • 2015-02-12
    • 2011-09-08
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多