У меня есть файл CSV под названием «A.csv». Мне нужно создать новый файл CSV с именем «B.csv» с данными из «A.csv».
Я буду использовать подмножество столбцов из «A.csv», и мне придется обновить значения одного столбца до новых значений в «B.csv». В конечном итоге я буду использовать эти данные из B.csv для проверки по базе данных.
- Как создать новый файл CSV?
- Как скопировать данные требуемых столбцов из A.csv в B.csv?
- Как добавить значения для определенного столбца?
Я новичок в Ruby, но могу читать CSV, чтобы получить массив или хэш.
Ответы:
Как отметил Микеб, есть документы - http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html - Или вы можете следовать приведенным ниже примерам (все проверены и за работой):
Чтобы создать новый файл:
В этом файле у нас будет две строки, строка заголовка и строка данных, очень простой CSV:
require "csv" CSV.open("file.csv", "wb") do |csv| csv << ["animal", "count", "price"] csv << ["fox", "1", "$90.00"] end
в результате получается файл с именем "file.csv" со следующим:
animal,count,price fox,1,$90.00
Как добавить данные в CSV
Почти та же формула, что и выше, только вместо использования режима «wb» мы будем использовать режим «a +». Для получения дополнительной информации об этом см. Этот ответ о переполнении стека: Какие существуют режимы и параметры Ruby File.open?
CSV.open("file.csv", "a+") do |csv| csv << ["cow", "3","2500"] end
Теперь, когда мы открываем наш file.csv, мы получаем:
animal,count,price fox,1,$90.00 cow,3,2500
Прочтите из нашего CSV-файла
Теперь вы знаете, как копировать и записывать в файл, читать CSV и, следовательно, получать данные для манипуляций, которые вы просто делаете:
CSV.foreach("file.csv") do |row| puts row #first row would be ["animal", "count", "price"] - etc. end
Конечно, это как один из сотни различных способов получить информацию из CSV с помощью этого драгоценного камня. Для получения дополнительной информации я предлагаю посетить документацию теперь, когда у вас есть учебник: http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html
источник
Вы видели класс Ruby CSV? Это кажется довольно всеобъемлющим. Посмотрите здесь: http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html
источник
Вероятно, вы захотите
CSV::parse
помочь Ruby понять ваш CSV как таблицу данных и обеспечить легкий доступ к значениям по заголовку.К сожалению, в доступной документации по
CSV::parse
методу не очень ясно, как на самом деле использовать его для этой цели.У меня была аналогичная задача, и мне гораздо больше помогли « Как читать и анализировать файлы CSV с помощью Ruby» на rubyguides.com, чем документация по классам CSV или ответы, указывающие на нее отсюда.
Я рекомендую прочитать эту страницу полностью. Важнейшая часть - преобразование заданного CSV в
CSV::Table
объект с помощью:table = CSV.parse(File.read("cats.csv"), headers: true)
Теперь есть документация по
CSV::Table
классу , но, опять же, вам могут больше помочь ясные примеры на странице rubyguides.com. Я выделю одну вещь: когда вы указываете.parse
ожидать заголовки, результирующая таблица будет рассматривать первую строку данных как строку[0]
.Возможно, вас особенно заинтересует
.by_col
метод, доступный для вашего новогоTable
объекта. Это позволит вам перебирать различные позиции индекса столбца на входе и / или выходе и либо копировать из одного в другой, либо добавлять новое значение к выходу. Если у меня все заработает, я вернусь и опубликую пример.источник