迭代API调用并写入cs

2024-04-29 15:49:28 发布

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

我有一个数据框(df),有700k个歌曲和艺术家的名字,我用这个列表从LyricWikia检索歌词。不过,我一次只能要5000首歌。

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

我现在有一段代码可以下载,直到我达到5000的上限。我希望它在5000之前停止并重新运行代码并将其附加到现有的csv(或dataframe)中。在一个循环中,艺术家们基本上跳过了名字。

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])

Tags: csv数据代码df列表songartist名字
1条回答
网友
1楼 · 发布于 2024-04-29 15:49:28

为什么不使用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文件:

^{pr2}$

编辑:

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')

相关问题 更多 >