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もより早い記述があるかもしれません.

[Ruby] [Python]

2008/05/02 12:06 | Comments(0)

Comments

Comment Form