csv.Error:预期的序列

时间:2017-11-27 07:54:08

标签: python json csv

我正在尝试从Watson API中保存JSON响应以进行音调分析。

我只想将tone_name的值保存为每行数据的标题和得分值。

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()

我希望得到像这样的csv

enter image description here

Watson API的响应就像这样

[
  {
    "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"
        }
      ]
    }
  }
]

修改

writer.writerow抛出Error: sequence expected错误。

1 个答案:

答案 0 :(得分:0)

您提供的JSON中存在错误(缺少大括号)。

所以我能够修复你的代码,虽然我不确定这是否是你期望的解决方案。

添加writer.writerow([tone.values()[1]])代替writer.writerow([tone.values()[1]])(不是括号)。每行只有一个项目。它导致以下csv输出:

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

如果这是您要查找的格式,请告诉我。

基本上,writerow需要一个值列表docs

您可能需要考虑使用with块而不是手动打开和关闭文件。您也可以在同一个块中打开多个文件:

with open('oobar.json', "rb") as infile, open("watsf.csv","wb") as outfile:
    json_s=infile.read()

    writer=csv.writer(outfile)

这是一种最佳做法,因为您不会冒错误地打开文件。