首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何迭代API调用Python 3中的两个列表

如何迭代API调用Python 3中的两个列表
EN

Stack Overflow用户
提问于 2019-01-12 11:57:51
回答 1查看 526关注 0票数 1

我有两个文件,其中包含需要在同一脚本中输入的信息。一个包含ID,每行一个,另一个列表也包含各自单独行上的参数。应该知道,这个列表每行包含4000多行。其他API调用都是成功的,但这一次更难弄清楚。

其工作方式是脚本从ID文件中读取行1,在url中的%s处插入该ID。这将完成API调用所需的url。然后,我需要与ID文件中它们各自的网络ID在同一行上的参数,放置在有效负载部分的%s中。

我得到了这一点,现在正在发生的是,当在ID列表中选择一个ID时,URL就会变得完整,并执行它应该做的事情。但是,当脚本开始读取内容文件时,它会一遍又一遍地迭代,直到所有网络的所有参数都完成,并且这只应用于一个网络(这不应该发生),然后它移动到下一个网络ID并执行相同的操作。

我发布了一个示例视觉,让您了解输出是什么。我知道一定有一种方法可以让它们一次读取一行,运行脚本,按顺序迭代到下一行,然后这样做,直到两个完整的列表都完成。

Python不是我最擅长的领域,所以我们非常感谢您的帮助。这些文件是.txt文件,并且格式正确。这些数据已经使用postman进行了测试,并且在我们的其他API调用中也是成功的,所以我们可以消除一些因素。

代码语言:javascript
复制
with open('TZ.txt') as file1, open ('TZContents.txt') as file2:
 array1 = file1.readlines()
 file = file2.readlines()
 for line in array1:
         url = 'https://dashboard.meraki.com/api/v0/networks/%s' %line.rstrip("\n")
         for line2 in file:
             payload = '%s' % line2.rstrip("\n")
             headers = {'X-Cisco-Meraki-API-Key': 'API Key','Content-Type': "application/json"}
             response = requests.request('PUT', url, headers = headers, data = payload, allow_redirects=True, timeout = 10)
             print(response.text)

输出示例如下:

代码语言:javascript
复制
{"id":"1111", "type":"wireless","name":"Network A}
{"id":"1111", "type":"wireless","name":"Network B}
{"id":"1111", "type":"wireless","name":"Network C}
{"errors":["Name has already been taken"]}
{"errors":["Name has already been taken"]}
{"errors":["Name has already been taken"]}
{"errors":["Name has already been taken"]}
{"errors":["Name has already been taken"]}
{"id":"2222", "type":"appliance","name":"Network A}
{"id":"2222", "type":"appliance","name":"Network B}
{"id":"2222", "type":"appliance","name":"Network C}

应该是这样:

代码语言:javascript
复制
{"id":"1111", "type":"wireless","name":"Network A} 
{"id":"2222", "type":"appliance","name":"Network B}
{"id":"3333", "type":"combined","name":"Network C}
EN

回答 1

Stack Overflow用户

发布于 2019-01-12 12:51:53

我看了您的描述,我猜这两个文件包含的行数完全相同。对吗?

在本代码中,使用了嵌套的for迭代,从而产生了冗余输出。您可以使用相同的索引来定位任一文件中的同一行。

修改后的代码可能是

代码语言:javascript
复制
with open('TZ.txt') as file1, open ('TZContents.txt') as file2:
    ids = file1.readlines()
    params = file2.readlines()
    n_lines = len(ids)
    for line_num in list(range(n_lines)):
        url = 'https://dashboard.meraki.com/api/v0/networks/%s' %ids[line_num].rstrip("\n")
        payload = '%s' % params[line_num].rstrip("\n")
        headers = {'X-Cisco-Meraki-API-Key': 'API Key','Content-Type': "application/json"}
        response = requests.request('PUT', url, headers = headers, data = payload, allow_redirects=True, timeout = 10)
        print(response.text)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54156683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档