CSV Writer Ruby vs Python
仕事でログをCSVに書き出す(@ruby)という処理をするということで,ちょいとググっていたらーPythonの方が早いとあったので遊びで簡単10万行を書き出しするタイムを測定した.
■ Ruby csv (Ruby標準CSV)
# csv_writer.rb
#!/usr/bin/ruby
require 'csv'
f = File.open('CSV.csv', 'a')
CSV::Writer.generate(f) do |csv|
100000.times do |i|
csv << [i, 'hoge', 'hige', 'hage', 'page', 'jige']
end
end
f.close
■ Ruby fastercsv (プラグイン gem install fastercsvによりインストール)
# fastercsv_writer.rb
#!/usr/bin/ruby
require 'rubygems'
require 'fastercsv'
FasterCSV.open('FasterCSV.csv', 'a') do |csv|
100000.times do |i|
csv << [i, 'hoge', 'hige', 'hage', 'page', 'jige']
end
end
■ Python csv (標準)
# csv_writer.py
#!/opt/local/bin/python
import csv
f = file('PyCSV.csv', 'a')
writer = csv.writer(f)
for i in range(0, 100000):
writer.writerow([i, 'hoge', 'hige', 'hage', 'page', 'jige'])
さて,これらのスクリプトを実行してみる.
$ time ./csv_writer.rb
real 0m3.325s
user 0m3.248s
sys 0m0.043s
$ time ./fastercsv_writer.rb
real 0m2.522s
user 0m2.440s
sys 0m0.042s
$ time ./csv_writer.py
real 0m0.548s
user 0m0.480s
sys 0m0.034s
お!Python ダントツではや!!なんかうれしい☆ fastercsvは思った以上な早さではなかったなぁ〜rubygemをrequireしているから!?
※ 適当にやってみたので,rubyもより早い記述があるかもしれません.
Comments