首页 > 解决方案 > 如何使用 Python 将 API 响应保存到 csv

问题描述

我以这种形式从 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'

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

标签: pythonpython-3.xcsvresponse

解决方案


您可以使用 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

推荐阅读