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()」が使えます。