読者です 読者をやめる 読者になる 読者になる

spring of life

技術、ときどき日常のブログ(予定)

CSV ライブラリを使ってみた

Ruby には標準で CSV を扱うための CSV ライブラリがあって、使うことがあったのでメモ

CSV の読み込み

  • 基本的にはCSV.readCSV.table
    • CSV.readは1行を配列として読み込む
    • CSV.tableは全体がオブジェクトになる
CSV.read
require 'csv'
csv = CSV.read(<csvファイルへのパス>)
  • 基本的には全て文字列として読み込まれる
  • convertersオプションを指定することで、日時や数値として読み込める
CSV.read('hoge.csv', :converters => :numeric) # 整数・小数は<code>Integer</code>, <code>Float</code>型に変換される
CSV.read('hoge.csv', :converters => :date_time) # 日時は<code>DateTime</code>型に変換される
CSV.read('hoge.csv', :converters => :all) # 日時、整数・小数は<code>DateTime</code>, <code>Integer</code>, <code>Float</code>型に変換される
  • 他にもいくつか用意されてるっぽい
CSV.table
require 'csv'
csv = CSV.table(<csvファイルへのパス>)
  • こちらもconvertersオプションを指定可能
    • デフォルトで何か指定されてるっぽい?
  • CSV::Tableクラスのインスタンスが生成される
CSV.table('hoge.csv') #=> #<CSV::Table mode:col_or_row row_count:xxx>
  • こっちも配列みたいな感じでeachとかを使える
csv = CSV.table('hoge.csv')
csv.each do |row|
  puts row[:hoge] # 各値にはシンボルでアクセス
end

CSV の書き込み

  • CSV.openを使う
require 'csv'
...
CSV.open('fuga.csv', 'w') do |csv|
  ...
end

または

require 'csv'
...
csv = CSV.open('fuga.csv', 'w')
csv.puts ['hoge', 'fuga']
csv.close