2016-04-28 11 views
0

私は、値が3番目の列に書き込まれていない空のままになっているような出力csvを与えるスクリプトを持っています。csv内のjsonを解析します

name|fail|total| 
test1|"{'fail': 0, 'total': 1}"| 
test2|"{'fail': 0, 'total': 6}"| 

私はこの出力をcsvの3列に出力したいcsvに書きます。 2番目の列を解析して2つの異なる列に値を出力するにはどうすればよいですか?ここで

name,fail,total 
test1,0,1 
test2,0,6 

は、私は誰もこれで私を助けることができるのpython

with open('file.csv', 'w') as csvfile: 
fieldnames = ['name', 'fail', 'total'] 
output = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter=',') 
output.writeheader() 
for k, v in lookupTable.iteritems(): 
    output.writerow({fieldnames[0]: k, fieldnames[1]: v}) 

を使用してCSVファイルにこれを記述しようとしています方法です。

答えて

0

出力からは、type(v)dictだと判断できるので、その値をアンパックする必要があります。正しい結果をもたらすforループがあります。

keys = ['plan', 'Total', 'Time', 'name', 'createdDate'] 
fieldnames = ['plan', 'totalDirections', 'stopTime', 'customerName', 'createDate'] 
row = dict(zip(fieldnames, [data[k] for k in keys])) 
output = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter=',') 
output.writeheader() 
output.writerow(row) 
+0

しかし、これは、私はこのエラーを取得しています:(私のために働いていない 'トレースバック(最新の呼び出しの最後):。 ファイル「analytics.py」、ライン48を、 行= dictの(ジップ(フィールド名に、[json_keysのkの場合はjson_data [k]))) TypeError:文字列インデックスはstrではなく整数でなければならない ' – csvb

+0

私は何の間違いをしたのか分かりません。私のリストはこのようなものです。出力としてきれいなcsvが必要です '{" createdDate ":" 2016-04-11 05:23:57 "、" stopTime ":" 2016-04-11T00:00 : "0"、 "合計": "1"、 "cust": "1mw"}、 "directionsTotal":0} ':00.000Z"、 "plan" – csvb

+0

あなたは今、エラーになりますか? – taras

0

@ user128285これはうまくいきます。私たちはjson.dumpsのために同じようにすることができますか?

私は、json.dumpsにcsvに書き込まれるべき出力がある別のスクリプトを持っています。

with open('customer_analysis', 'w') as csvfile: 
fieldnames = ['plan', 'totalDirections', 'stopTime', 'customerName', 'createDate'] 
output = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter=',') 
output.writeheader() 
for a, b, c, d, e in json.dumps(data): 
output.writerow({fieldnames[0]: a, fieldnames[1]: b, fieldnames[2]: c, fieldnames[3]: d['fail'], fieldnames[4]: d['total'], fieldnames[5]: e}) 

この正しいです:

print json.dumps(data)

はcsvファイルに上記の出力を解析するために、上記のように、私はあなたの提案の後にしようとした方法をここで

{"plan": "yes", "Total": 0, "Time": "2016-04-11T00:00:00.000Z", "name": {"fail": "0", "total": "1", "cName": "red"}, "createdDate": "2016-04-11 05:23:57"}

があるの下のような出力が印刷さ?またはこれを修正する方法は?

+0

上記のコードスニペットを使用すると、 'ValueError:解凍に1つ以上の値が必要です'エラー – csvb

+0

writerowに渡される辞書を明示的に構築する必要があります。 – taras