Ruby で CSVファイルの読み込み・書き込み

1 min読了の目安(約800字TECH技術記事

CSVファイルの読み込み

以下のようなデータを想定

id name
1 Mat
2 Emily
3 Bob
require 'csv'
INPUT_CSV_PATH = "./input.csv"

table = CSV.read(INPUT_CSV_PATH, headers: true)

table.each do |row|
  p row['id']
  p row['name']
end

以下のような結果になる

1
Mat
2
Emily
3
Bob

CSVファイルの書き出し

require 'csv'
OUTPUT_CSV_PATH = "./output.csv"

names = ['Mat', 'Emily', 'Bob']
results = []
names.each_with_index do |i, name|
  result[:id] = i
  result[:name] = name
  results << result
end

# results の hash の key をカラム名に指定
CSV.open(OUTPUT_CSV_PATH, 'w') do |csv|
  header = results[0].keys.map  { |k| k.to_s }
  header[0] = "\uFEFF" + header[0]
  csv << header
  results.each do |result|
    csv << result.values
  end
end

以下のようなCSVができあがる

id name
1 Mat
2 Emily
3 Bob