如何创建一个在每次循环时将新行添加到CSV的循环?

问题描述 投票:0回答:2

我正在使用API​​,并试图通过遍历每个用户API令牌来提取调查的完整列表。我对循环的想法是,它一次读取一个API令牌(存储在列表中),存储数据,将其转换为pandas数据框,然后将数据存储在CSV文件中。到目前为止,我已经创建了一个脚本,该脚本可以成功遍历API令牌列表,但是每次都覆盖CSV文件。当前是我的脚本:

apiToken = ["n0000000000001", "N0000000002"]

for x in apiToken:
    baseUrl = "https://group.qualtrics.com/API/v3/surveys"
    headers = {
        "x-api-token": x,
        }
    response = requests.get(baseUrl, headers=headers)
    surveys = response.text
    surveys2 = json.loads(response.text)
    surveys3 = surveys2["result"]["elements"]
    df = pd.DataFrame(surveys3)
    df.to_csv('survey_list.csv', index=False)

为了将新行添加到CSV而不是覆盖新行,我需要进行哪些更改?

python pandas loops csv append
2个回答
0
投票

假设您的代码正确,这应该可以。您列出了单独的数据框,并将它们连接在一起。如果数据框(dfs)列表中的所有数据框具有相同的列名,则此方法有效。

apiToken = ["n0000000000001", "N0000000002"]
dfs = []

for x in apiToken:
    baseUrl = "https://group.qualtrics.com/API/v3/surveys"
    headers = {
        "x-api-token": x,
        }
    response = requests.get(baseUrl, headers=headers)
    surveys = response.text
    surveys2 = json.loads(response.text)
    surveys3 = surveys2["result"]["elements"]
    dfs.append(pd.DataFrame(surveys3))

final_df = pd.concat(dfs)
final_df .to_csv('survey_list.csv', index=False)

0
投票

使用csv包,您可以按如下所示将文件追加到csv:

import csv
...
with open(filename,'a') as filecsv:
    writer = csv.writer(filecsv)
    line = # whatever csv line you want to append
    writer.writerow(line)
© www.soinside.com 2019 - 2024. All rights reserved.