2017-11-27 17 views
-1

Watson APIからのトーン解析用のJSONレスポンスを保存しようとしています。csv.Error:sequence expected

私は、tone_nameの値を各データのヘッダーとスコア値としてCSVの各行に保存したいだけです。

import csv 

import json 



infile=open('oobar.json', "rb") 

json_s=infile.read() 

outfile=open("watsf.csv","wb") 

writer=csv.writer(outfile) 

count = 0 


for data in(json.loads(json_s)): 
    categories = data['document_tone'] 
    for category in categories['tone_categories']: 
     for tone in category['tones']: 
      if count == 0: 
       header = tone.values()[0] 
       writer.writerow(header) 
       count += 1 
      writer.writerow(tone.values()[1]) 
infile.close() 
outfile.close() 

私はこの

[ 
    { 
    "document_tone": { 
     "tone_categories": [ 
     { 
      "category_id": "emotion_tone", 
      "tones": [ 
      { 
       "tone_name": "Anger", 
       "score": 0.068227, 
       "tone_id": "anger" 
      }, 
      { 
       "tone_name": "Disgust", 
       "score": 0.035456, 
       "tone_id": "disgust" 
      }, 
      { 
       "tone_name": "Fear", 
       "score": 0.043625, 
       "tone_id": "fear" 
      }, 
      { 
       "tone_name": "Joy", 
       "score": 0.779054, 
       "tone_id": "joy" 
      }, 
      { 
       "tone_name": "Sadness", 
       "score": 0.054364, 
       "tone_id": "sadness" 
      } 
      ], 
      "category_name": "Emotion Tone" 
     } 
     ] 
    } 
    } 
] 

EDIT

writer.writerowはトンだったようにワトソンのAPIからの応答があり、この

enter image description here

のようなCSVファイルを得ることを望んhrowing Error: sequence expectedエラー。

+0

'writer.writerow([tone.values()[1]])を試してください。 'writerow'はシーケンスを期待しています(リストは1つのシーケンスです) – roganjosh

答えて

0

提供したJSONにエラーがありました(中括弧がありません)。

私はあなたのコードを修正することができましたが、これが期待した解決策であるかどうかはわかりません。

writer.writerow([tone.values()[1]])の代わりにwriter.writerow([tone.values()[1]])(括弧ではない)を追加します。各行には1つのアイテムしかありません。結果は次のCSV形式になります。

A,n,g,e,r 
0.068227 
0.035456 
0.043625 
0.779054 
0.054364 

探していた形式であれば教えてください。

基本的には、writerowは値リストdocsを想定しています。

手動でファイルを開いたり閉じたりする代わりに、withブロックの使用を検討してください。同じブロック内に複数のファイルを開くこともできます。

誤ってファイルを開いたままにしておく危険はないので、これはベストプラクティスです。

+0

私は明確ではないことをお詫びします。目標は、各行の列名と対応する値として5つの異なる感情を得ることです。私は参照のために質問に画像を追加しました。 –

関連する問題