Использование Ruby CSV для извлечения одного столбца

#ruby #csv

#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::Режим таблицы:col_ или_row row_count:2104 >

В документации говорится, что я должен иметь возможность использовать by_col(), но когда я пытаюсь вывести

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

Это выдает мне ошибку «неопределенный метод ‘col'»

Может кто-нибудь объяснить мне, как я должен использовать CSV? и если есть способ быстрее получать столбцы, используя ‘read’ вместо ‘table’?

Я использую Ruby 1.92, в котором говорится, что он использует FasterCSV, поэтому мне не нужно использовать драгоценный камень FasterCSV.

Комментарии:

1. Возможно, вы ошибаетесь, потому что by_col не принимает никаких аргументов.

Ответ №1:

Чтобы извлечь столбец из csv, я бы, вероятно, сделал что-то вроде следующего:

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

Это должно быть существенно быстрее, чем любые операции с CSV.Таблица

Ответ №2:

Вы можете получить значения из одного столбца CSV-файлов, используя следующий фрагмент.

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

Комментарии:

1. это лучший ответ