使用Ruby CSV提取一列

时间:2011-05-11 19:27:01

标签: ruby csv

我一直在尝试从csv文件中获取单个列。

我已经阅读了文档http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html 但仍然不明白如何使用它。

如果我使用CSV.table,则响应速度与CSV.read相比非常慢。我承认我加载的数据集非常大,这正是我只想从中获取单个列的原因。

我的请求目前看起来像这样

@dataTable = CSV.table('path_to_csv.csv')

当我调试时,我收到

的回复
#<CSV::Table mode:col_or_row row_count:2104 >

文档说我应该可以使用by_col(),但是当我尝试输出

<%= debug @dataTable.by_col('col_name or index') %>

它给了我“未定义的方法'col'错误”

有人可以向我解释我应该如何使用CSV?如果有办法使用'read'代替'table'来更快地获取列?

我正在使用Ruby 1.92,它说它使用的是更快的CS,因此我不需要使用FasterCSV gem。

2 个答案:

答案 0 :(得分:12)

要从csv中取出一列,我可能会执行以下操作:

col_data = []
CSV.foreach(FILENAME) {|row| col_data << row[COL_INDEX]}

这应该比CSV.Table上的任何操作快得多

答案 1 :(得分:6)

您可以使用以下代码段从csv文件的单个列中获取值。

@dataTable = CSV.table('path_to_csv.csv')
@dataTable[:columnname]