Как создать al oop, который добавляет новые строки в CSV при каждом цикле? - PullRequest
0 голосов
/ 07 мая 2020

Я работаю с API и пытаюсь получить полный список опросов, перебирая каждый токен API пользователя. Моя идея для l oop заключается в том, что он считывает каждый токен 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, а не перезаписывались?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Если ваш код правильный, это должно сработать. Вы составляете список отдельных фреймов данных и объединяете их вместе. Это работает, если все DataFrames в списке DataFrames (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 голосов
/ 07 мая 2020

Используя пакет 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...