Как сохранить ответ API в CSV с помощью Python - PullRequest
0 голосов
/ 03 августа 2020

Я получаю данные распознавания лиц от 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'.

Может ли кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Вы можете относительно легко сделать это с помощью библиотек 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
1 голос
/ 03 августа 2020

Может быть, перебор для небольшой задачи, но вы можете сделать следующее:

  1. преобразовать JSON ответ (не забудьте проверить исключения и т.д. c.) В python словарь

    di c = ответ. json ()

  2. Создайте фрейм данных, например, используя pandas:

    df = pandas .DataFrame (di c)

  3. Сохранить в csv без индекса:

    df.to_csv ('detect.csv', index = Ложь, sep = "\ t")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...