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