【问题标题】:How to save API response to csv with Python如何使用 Python 将 API 响应保存到 csv
【发布时间】:2020-08-03 19:01:31
【问题描述】:

我正在以这种形式从 API 获取人脸检测数据:

{"id":1,"ageMin":0,"ageMax":100,"faceConfidence":66.72220611572266,"emotion":"ANGRY","emotionConfidence":50.0'
b'2540969848633,"eyeglasses":false,"eyeglassesConfidence":50.38102722167969,"eyesOpen":true,"eyesOpenConfidence":50.20328140258789'
b',"gender":"Male","genderConfidence":50.462989807128906,"smile":false,"smileConfidence":50.15522384643555,"sunglasses":false,"sun'
b'glassesConfidence":50.446510314941406}]'

我想将它保存到这样的 csv 文件中:

id  ageMin  ageMax  faceConfidence
1   0       100     66

... 等等。 我试着这样做:

response = requests.get(url, headers=headers)
    with open('detections.csv', 'w') as f:
        writer = csv.writer(f)
        for item in response:
            writer.writerow(str(item))

这会将每个字符放在自己的单元格中。我也尝试过使用item.id,但这会报错:AttributeError: 'bytes' object has no attribute 'id'

有人能指出正确的方向吗?

【问题讨论】:

  • 您的回复是 JSON 格式的。 Python 不会自动将 JSON 字符串转换为对象,因此为什么你会得到 AttributeError。在尝试访问对象的属性之前,使用 json 库解析字符串。
  • 要获得json响应,使用response.json()而不是读取并转换为json

标签: python python-3.x csv response


【解决方案1】:

对于小任务来说可能有点过头了,但您可以执行以下操作:

  1. 将 JSON 响应(不要忘记检查异常等)转换为 python 字典

    dic = response.json()

  2. 创建一个数据框,例如使用 pandas:

    df = pandas.DataFrame(dic)

  3. 保存到 csv 省略索引:

    df.to_csv('detections.csv', index=False, sep="\t")

【讨论】:

    【解决方案2】:

    您可以使用 pandas 和 json 库相对轻松地做到这一点。

    import pandas as pd
    import json
    
    response = """{
        "id": 1,
        "ageMin": 0,
        "ageMax": 100,
        "faceConfidence": 66.72220611572266,
        "emotion": "ANGRY",
        "emotionConfidence": 50.0,
        "eyeglasses": false,
        "eyeglassesConfidence": 50.38102722167969,
        "eyesOpen": true,
        "eyesOpenConfidence": 50.20328140258789,
        "gender": "Male",
        "genderConfidence": 50.462989807128906,
        "smile": false,
        "smileConfidence": 50.15522384643555,
        "sunglasses": false,
        "glassesConfidence":50.446510314941406
    }"""
    
    file = json.loads(doc)
    
    json = pd.DataFrame({"data": file})
    json.to_csv("response.csv")
    

    这是格式化为 csv 的响应。

    ,data
    ageMax,100
    ageMin,0
    emotion,ANGRY
    emotionConfidence,50.0
    eyeglasses,False
    eyeglassesConfidence,50.38102722167969
    eyesOpen,True
    eyesOpenConfidence,50.20328140258789
    faceConfidence,66.72220611572266
    gender,Male
    genderConfidence,50.462989807128906
    glassesConfidence,50.446510314941406
    id,1
    smile,False
    smileConfidence,50.15522384643555
    sunglasses,False
    

    【讨论】:

      猜你喜欢
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多