应该为我所做的每个 API 查询将数据附加到单独的文本文件中的循环正在跨这些单独的文件复制数据

Loop thats supposed to append data into separate text files for each API query I do, is duplicating the data across those separate files

我有一个网站列表,我正在对其进行 API 查询。我还有一个单独的列表,用于存储这些网站的缩短版本,我想将其作为数据从 API 查询附加到的文本文件的名称。

我想为每个网站做的是,将查询中的数据附加到名为 website1.txt 的文件中,依此类推。相反,发生的是来自 website1、website2、website3 的所有数据都附加到 website1.txt、website2.txt 等。所有这些文本文件都具有相同的数据,而不是将单独的数据附加到每个文本文件.

这是我的代码:

list_of_websites = ['api.cats.com/animaldata', 'api.elephants.com/animaldata', 'api.dogs.com/animaldata']

name_of_websites = ['cats data', 'elephants data', 'dogs data']

for website in list_of_websites:
    
    
    counter = 1 
    while True:
        response = requests.get(f"https://api.superComputer.info?page={counter}", headers={ "Accept": "application/.v3+json", "Authorization": "Bearer 123456"}, params={"site": f"{website}"})
           
            
                
            
        
        if response.json():
            for site in name_of_websites:    
                file_name = f"{site}.txt"  
            
                f = open(file_name, "a") 
                
            
                f.write(json.dumps(response.json(), indent=4))
            counter += 1

            
            
        else:
            break   

由于网站 url 和网站名称存在 1-1 映射,您可以使用 zip 并对其进行迭代。

并且由于不同页面的所有内容都将附加到一个文件中,因此您可以在 while 循环之外打开它一次。

list_of_websites = ['api.cats.com/animaldata', 'api.elephants.com/animaldata', 'api.dogs.com/animaldata']

name_of_websites = ['cats data', 'elephants data', 'dogs data']

for website, website_name in zip(list_of_websites,name_of_websites):
    
    counter = 1
    file_name = f"{website_name}.txt"
    with open(file_name, 'a') as f:
        while True:  
            response = requests.get("https://api.superComputer.info", headers={ "Accept": "application/.v3+json", "Authorization": "Bearer 123456"}, params={"page": counter, "site": f"{website}"})
            if response.ok:
                f.write(json.dumps(response.json(), indent=4))
                counter +=1
            else:
                break