如何在python中api分页循环后编写可读的csv文件

2024-05-19 05:21:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法将api调用循环的输出写入可读的csv文件。 我对python非常陌生,可能是因为不同的数据格式。 csv仅包含9列,它不会将所有其他元素作为单独的列读取

import requests
import json
import pandas as pd

FileNaam = 'name'
   
params = (
    ('api_key', 'api_key'),
    ('since', '1595590000'),
    ('sort', 'asc')
)
url = 'https://a.klaviyo.com/api/v1/metrics/timeline'
discover_api = requests.get(url, params=params).json()
    
events = discover_api["data"]
next_id = discover_api["next"]

continueloop = 1

while continueloop ==1:
    params = (
        ('api_key', 'api_key'),
        ('since', next_id),
        ('sort', 'asc')
    )
    discover_apiloop = requests.get(url, params=params).json()
    events.extend(discover_apiloop["data"])
    if discover_apiloop["next"] is None:
        continueloop = 0
    else:
        next_id = discover_apiloop["next"]
  
data = json.dumps(events, sort_keys=True, indent=4)

df = pd.read_json(data)
df.to_csv(FileNaam+'.csv')

当Im不循环,只执行一个api调用时,Im使用不同的格式,csv很好。下面的代码工作正常,但我希望在使用循环时得到相同的结果

import requests
import json
import pandas as pd

FileNaam = 'name'

params = (
    ('api_key', 'api_key'),
    ('sort', 'asc'),
    ('since', '1595590000')
)

response = requests.get('https://a.klaviyo.com/api/v1/metrics/timeline', params=params)

responsetext = response.text
data = json.loads(responsetext)
df = pd.json_normalize(data['data'])
df.to_csv(FileNaam +'.csv')

如何转换我的输出以获得正确的csv


Tags: csvkeyimportapijsondfdataparams
1条回答
网友
1楼 · 发布于 2024-05-19 05:21:56

在循环之后使用json_规范化就可以工作了

import requests
import json
import pandas as pd

bestandsNaam = 'name'

params = (
    ('api_key', 'api_key'),
    ('since', '1595650000'),
    ('sort', 'asc')
)
url = 'https://a.klaviyo.com/api/v1/metrics/timeline'
discover_api = requests.get(url, params=params).json()

events = discover_api["data"]
next_id = discover_api["next"]

continueloop = 1

while continueloop ==1:
    params = (
        ('api_key', 'api_key'),
        ('since', next_id),
        ('sort', 'asc')
    )
    discover_apiloop = requests.get('https://a.klaviyo.com/api/v1/metrics/timeline', params=params).json()
    events.extend(discover_apiloop["data"])
    if discover_apiloop["next"] is None:
        continueloop = 0
    else:
        next_id = discover_apiloop["next"]

df = pd.json_normalize(events)
df.to_csv(bestandsNaam+'.csv')

相关问题 更多 >

    热门问题