Techioz Blog

Ruby CSV を使用して 1 列を抽出する

概要

私は CSV ファイルから単一の列を取得しようとしています。

http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html のドキュメントを読みました。 しかし、まだ使い方がよくわかりません。

CSV.table を使用すると、CSV.read に比べて応答が非常に遅くなります。ロードしているデータセットが非常に大きいことは認めますが、それがまさにそこから 1 つの列だけを取得したい理由です。

私のリクエストは現在次のようになります

@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 をどのように使用するかを説明してもらえますか? 「table」の代わりに「read」を使用して列をより速く取得する方法があるかどうか?

私は Ruby 1.92 を使用していますが、これは FasterCSV を使用していると記載されているため、FasterCSV gem を使用する必要はありません。

解決策

CSV から列を取り出すには、おそらく次のようなことを行うでしょう。

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

これは、CSV.Table に対するどの操作よりも大幅に高速になるはずです。