#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. это лучший ответ