迭代API调用并写入csv

时间:2017-09-05 07:25:15

标签: python api csv

我有一个包含700k名歌曲和艺术家名字的数据框(df),我使用此列表从LyricWikia中检索歌词。但是,我一次只能要求5000首歌曲。

我想多次运行5000次调用的查询,并将结果输出到一个或多个csvs中。

我现在有一段代码只能下载,直到我达到5000的上限。我希望它在5000之前停止并重新运行代码并将其附加到现有的csv(或数据帧)。所以基本上是一个for循环,在数据框中再次跳过艺术家和歌曲名称。

with open('lyrics-4.csv', 'w') as csv_file:
    writer = csv.writer(csv_file)
    for i, row in enumerate(df.itertuples(), 1): 
        lyrics = []
        artist = row[2]
        song = row[3]
        try:
            lyrics = lyricwikia.get_lyrics(artist, song)
        except:
            pass
        writer.writerow([artist,song,lyrics])

1 个答案:

答案 0 :(得分:0)

为什么不使用for循环来分解5000块,只使用pandas直接写入csv?

for i in range(N):
    # api call to acquire 5000 songs to dataframe called df here
    df['lyrics'] = lyricwikia.get_lyrics(df['artist'], df['song'])
    df.to_csv('lyrics'+str(i)+'.csv')

或者,如果要附加到相同的csv文件:

for i in range(N):
    # api call to acquire 5000 songs to dataframe called df here
    df['lyrics'] = lyricwikia.get_lyrics(df['artist'], df['song'])
    df.to_csv('lyrics.csv', mode='a')

编辑:

for i in range(0, len(df), 5000):    
    df_chunk = df[i : 2*i]
    df_chunk ['lyrics'] = lyricwikia.get_lyrics(df_chunk ['artist'], df_chunk ['song'])
    df_chunk .to_csv('lyrics.csv', mode='a')