Rubyを使ってcsvファイルを読み込む・書き込む方法まとめ

19/01/27 15:54:43     19/05/05 17:30:51

Rubyを使ってcsvファイルを読み込む・書き込む方法

Rubyの事務処理などでよく使うcsvファイルの扱いについて解説します。メインとなるのは読み込みと書き込みですが、それに加え、そもそもcsvとは何か、といったことから説明していきます。

csvとは

csvとは、「データがカンマ(,)で区切られていて拡張子が.csv」のファイルのことです。csvはComma Separated Valueの略で、名前がそのままカンマで分けられた値、となっています。

csvはエクセルなどで出力することが多いため、エクセルのファイル形式の一種と考えている方も多いかと思います。それは間違いではないのですが、エクセル以外でも使用機会が多いファイル形式です。

条件をまとめると非常にシンプルで、「カンマで区切られている」「拡張子が.csv」ということです。

csvファイルを読み込む方法

csvファイルを読み込む際やその他の操作を行う際、まずはrequireメソッドでライブラリを使用できる状態にしておきます。requireメソッドは、Rubyでライブラリや外部ファイルを使用できるようにするためのメソッドです。

たとえば、以下のようなファイルを用意します。

  • ファイル名
    file.csv
  • ファイルの記述内容
    cobol,assembly,perl
    java,c,c++,c#,objective-c
    ruby,php,python,go
    kotlin,swift
    html,css,javascript

このファイルをRubyから読み込むには、いくつか方法があります。

foreeachで一行ずつ読み込む

一つ目の方法は一行ずつ読み込む方法です。以下のようになります。

require 'csv'

CSV.foreach("file.csv") do |row|
    p row
end

上記のソースコードを実行すると、以下のようにコンソール出力されます。

[“cobol”,”assembly”,”perl”]
[“java”,”c”,”c++”,”c#”,”objective-c”]
[“ruby”,”php”,”python”,”go”]
[“kotlin”,”swift”]
[“html”,”css”,”javascript”]

ファイル内のすべての記述内容が出力されました。行ごとに、カンマ区切りで配列になっています。また、行列を指定して特定の行列だけを出力することも可能です。

require 'csv'

CSV.foreach("file.csv") do |row|
    p row[0]
end

このコードを実行すると、最初の列の要素だけが出力されます。

“cobol”
“java,”
“ruby”
“kotlin”
“html”

parseメソッドで文字列のcsvを読み込む

次に、parseメソッドを使用して文字列のcsvを読み込みます。

require 'csv'
CSV.parse('cobol,java ,ruby ') do |row|
    puts row
end

このコードを実行すると、以下のようにコンソール出力されます。

cobol
java
ruby

このように、指定した文字列を読み込みました。

readメソッドでcsv全体を読み込む

readメソッドを使用してcsv全体を読み込むと、すべての要素が二次元配列として読み込まれます。

require 'csv'

p CSV.read("file.csv")

このコードを実行すると、以下のように二次元配列として出力されます。

[[“cobol”,”assembly”,”perl”],[“java”,”c”,”c++”,”c#”,”objective-c”], [“ruby”,”php”,”python”,”go”], [“kotlin”,”swift”], [“html”,”css”,”javascript”]]

二次元配列なので、二次元で要素を指定して取り出すことが可能です。

require 'csv'
p CSV.read("file.csv")[0]
p CSV.read("file.csv")[1][0]

このコードを実行すると以下のように出力されます。

[“cobol”,”assembly”,”perl”]
[“java”]

csvファイルに書き込む方法

次に、csvファイルに書き込む方法を紹介します。書き込みにはopenメソッドを使用します。サンプルコードは以下です。

require 'csv'

CSV.open("write-file.csv", "w") do |test|
    test << ["cobol”,”assembly”,”perl”]
    test << ["java”,"c”,”c++”,”c#”,”objective-c”]
    test << ["ruby”,”php”,”python”,”go”]
    test << ["kotlin”,”swift”]
    test << ["html”,”css”,”javascript”]
end

上記のコードを実行した出力結果は以下です。

    • ファイル名
      write-file.csv
  • 記述内容
    cobol,assembly,perl
    java,c,c++,c#,objective-c
    ruby,php,python,go
    kotlin,swift
    html,css,javascript

第一引数には書き込むファイル名を指定し、第二引数にはモードを選択します。たとえばwの場合writeで書き込みモードになります。

その他csvに使えるメソッド

読み込みと書き込みについては以上なのでこれだけ把握しておけば問題ないのですが、他にもcsvに対して使えるメソッドがあります。

tableメソッドで値を取得

tableメソッドは、「ヘッダー」「列」「行」の三つを取得できるメソッドです。サンプルコードは以下です。

require 'csv'

csv = CSV.table("file.csv")
p csv.headers
p csv[1]
p csv[:language]

このコードの出力結果は以下です。

[:cobol, :assembly, :perl]
#
[“java”, ” ruby”, ” kotlin”, ” html”]

generateメソッドでcsv形式に変換する

generateメソッドを使用することで、csv形式のデータを生成することが可能です。

require 'CSV'

headers = ["cobol","assembly","perl"]
rows    =     [["java”,"c”,”c++”,”c#”,”objective-c"], ["ruby”,”php”,”python”,”go"], ["kotlin”,”swift"]], ["html”,”css”,”javascript”]
csv_data = CSV.generate() do |csv|
    csv << headers
    rows.each do |row|
        csv << row
    end
end
p csv_data

このコードを実行すると、以下のようにcsvデータ化されます。

“cobol,assembly,perl\njava,c,c++,c#,objective-c\nruby,php,python,go\nkotlin,swift\nhtml,css,javascript\n”

以上、Rubyでのcsvデータの扱いについて解説してきました。

基本的には読み込みと書き込みができれば問題ないかと思いますが、他にも操作方法があるということでした。

Rubyのフリーランス案件をチェック

→Rubyの案件情報一覧はこちら

Ruby関連記事
1, Rubyフリーランスの仕事や単価、ruby on railsの在宅案件まで
2, Rubyとは?学習方法や将来性、perlやphp、Pythonの比較はどう?
3, Ruby on RailsでMySQLを使用する際の接続手順
4, あるiOSアプリのエンジニアがRuby on Railsのプロジェクトに加わった話
5, 小学生でも数時間でアプリを作れたRuby on railsの入門書3選
6, 【決定版!】Rubyでできることとは?
7, Ruby開発の新卒採用している会社まとめ
8, Rubyで文字列から数値へ変換する方法まとめ
9, RubyのWebサーバ「puma」を使ってみた感想
10, Rubyでのmecabの使い方を徹底解説します
11, Rubyでハッシュに対する繰り返し処理を行うeachの3つのメソッドの使い方
12, Rubyのyardを使ってソースからドキュメントを生成する方法
13, Rubyでディレクトリ内のファイルを一覧出来るようにする方法
14, (この記事)Rubyを使ってcsvファイルを読み込む・書き込む方法まとめ
15, MacでRubyの開発環境構築する方法をまとめました
16, サーバーサイド開発言語としてのRubyってどうなの?
17, Rubyで範囲オブジェクトを配列にする方法
18, CentOSサーバにRubyをインストールする方法
19, Rubyを使ってやりたいことから逆引きで使える機能を解説します
20, Rubyでopen uriを使ってWeb上のデータを取得しよう
21, Rubyでハッシュをマージ(結合)する方法まとめ
22, Rubyのrakeの使い方をまとめました
23, Rubyでのtimeクラスの取扱に関してのまとめ

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する