【问题标题】:How to create a loop that appends new rows to CSV each time it loops?如何创建一个循环,每次循环时将新行附加到 CSV?
【发布时间】:2020-08-22 15:42:57
【问题描述】:

我正在使用 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 而不是覆盖它?

【问题讨论】:

  • 您应该创建一个通用数据帧,并为每个循环 ini apiToken,将数据帧附加到通用数据帧。然后,在您的循环之外,将通用数据框转换为 CSV。
  • 你能提供代码吗?我正在努力解决它
  • @wild9 可以,还需要吗?
  • 是的,请,我就是做错了
  • @wild9 好的,我会为你的问题添加一个新答案。

标签: python pandas loops csv append


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:

    使用 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)
    

    【讨论】:

      猜你喜欢
      • 2018-10-12
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 2011-10-22
      • 2015-06-29
      • 1970-01-01
      • 2020-02-29
      相关资源
      最近更新 更多