Python2でCSVデータを扱うには

CSVファイルに次のような値が保存されているとします。

1,15
2,31
3,43
4,82

このデータをあるJavaScriptライブラリで使いやすい形のJSONデータへ変換したいとします。例えば、次のように変換したいとします。

[
  ["x","1","2","3","4"],
  ["y","0.15","0.31","0.43","4.82"]
]

データ変換方法はいくつかありますが、Python2で実装してみましょう。


データはdata.txtというファイルに保存されているとします。csvというモジュールがあるので、これを利用します。データは2回利用する必要があるので、ファイルから読み込んだ値はdata_listへ保存して、これを利用することにしています。対象データが大きくてメモリ上の変数で保持できない場合は、ファイルからの読み込みを2回実行する実装の方が良いでしょう。そうでないのなら、変数へ保持させた方がプログラムは単純になります。

# -*- coding: utf-8 -*-
import csv
import sys

data_file = "data.txt"
r = csv.reader(open(data_file, 'r'), delimiter=',')
data_list = []
for row in r:
    data_list.append([row[0], row[1]])

print "["
sys.stdout.write("  [\"x\", ")
cnt = 0
delimiter = ""
for d in data_list:
    if (cnt != 0):
        delimiter = ","
    s = delimiter + "\"" + d[0] + "\""
    print s,
    cnt = cnt + 1
print "],"

sys.stdout.write("  [\"y\", ")
cnt = 0
delimiter = ""
for d in data_list:
    if (cnt != 0):
        delimiter = ","
    t = float(d[1]) / 100
    s = delimiter + "\"" + str(t) + "\""
    print s,
    cnt = cnt + 1
print "]"
print "]"

「print s,」と最後に「,」をつけるとprintは改行を空白に置換して出力します。空白置換をされたくないときは、sys.stdout.write(s) を使うと良いでしょう。このプログラムはサンプルなので、両方を使って書いてみています。

数字列をフロート型へ変換するには「float()」を使います。ちなみに、整数型へ変換したい場合は「int()」が使えます。

同じタグの記事: CSV
同じタグの記事: Python
同じカテゴリの記事: Program