Python 如何并行处理来自两个不同文件的行
我可以成功地将TZ.txt文件内容(一次一行)插入到url行中%s所在的位置,这非常有效 TZContents.txt中有json格式的数据,我需要以插入TZ.txt文件内容的相同方式将该数据插入payload='{}'括号中。目前它还没有这样做,我觉得这个设置不正确。有什么建议吗 我不关心内容文件中的剥离行,就像我处理TZ.txt文件一样 从本质上讲,在我尝试添加一个payload参数以将有效负载插入另一个文件之前,代码工作得很好,但到目前为止还没有成功。如果你需要更多的信息,请告诉我。谢谢你的帮助Python 如何并行处理来自两个不同文件的行,python,for-loop,Python,For Loop,我可以成功地将TZ.txt文件内容(一次一行)插入到url行中%s所在的位置,这非常有效 TZContents.txt中有json格式的数据,我需要以插入TZ.txt文件内容的相同方式将该数据插入payload='{}'括号中。目前它还没有这样做,我觉得这个设置不正确。有什么建议吗 我不关心内容文件中的剥离行,就像我处理TZ.txt文件一样 从本质上讲,在我尝试添加一个payload参数以将有效负载插入另一个文件之前,代码工作得很好,但到目前为止还没有成功。如果你需要更多的信息,请告诉我。谢谢你
import requests, meraki, os, json
with open('TZ.txt') as file, open ('TZContents.txt') as file2:
array = file.readlines()
array1 = file2.readlines()
for line in array:
for line2 in array1:
line = line.rstrip("\n")
url = 'https://dashboard.meraki.com/api/v0/networks/%s' %line
payload = "{%s}" %line2
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)
您需要像这样使用zip:
import requests
with open('TZ.txt') as file:
tz_lines = file.readlines()
with open ('TZContents.txt') as file2:
tz_contents = file2.readlines()
for name, contents in zip(tz_lines, tz_contents):
url = 'https://dashboard.meraki.com/api/v0/networks/%s' % name.rstrip("\n")
headers = {'X-Cisco-Meraki-API-Key': 'API KEY','Content-Type': 'application/json'}
response = requests.request('PUT', url, headers=headers, data='{%s}' % contents, allow_redirects=True, timeout = 10)
print(response.text)
这也非常容易出错。如果可能的话,最好以一种不依赖于事物完美排列的方式生成源数据。要捕获可能的错误,可以尝试以下操作:
if len(tz_lines) != len(tz_contents):
raise RuntimeError("Files are not the same length!")
但理想的情况是,首先将所有数据放在一起。将所有内容保存为JSON将是理想的:
[
{"name": "the name string", "payload": {"your": "payload"}},
"more rows"
]
然后,您可以在那些带有块的
中使用json.load(file)
。请求对JSON有很好的支持,因此您可能可以像传递文件内容一样直接传递解码后的JSON。您需要像这样使用zip:
import requests
with open('TZ.txt') as file:
tz_lines = file.readlines()
with open ('TZContents.txt') as file2:
tz_contents = file2.readlines()
for name, contents in zip(tz_lines, tz_contents):
url = 'https://dashboard.meraki.com/api/v0/networks/%s' % name.rstrip("\n")
headers = {'X-Cisco-Meraki-API-Key': 'API KEY','Content-Type': 'application/json'}
response = requests.request('PUT', url, headers=headers, data='{%s}' % contents, allow_redirects=True, timeout = 10)
print(response.text)
这也非常容易出错。如果可能的话,最好以一种不依赖于事物完美排列的方式生成源数据。要捕获可能的错误,可以尝试以下操作:
if len(tz_lines) != len(tz_contents):
raise RuntimeError("Files are not the same length!")
但理想的情况是,首先将所有数据放在一起。将所有内容保存为JSON将是理想的:
[
{"name": "the name string", "payload": {"your": "payload"}},
"more rows"
]
然后,您可以在那些带有
块的中使用json.load(file)
。而且请求对JSON有很好的支持,因此您可能可以像传递文件内容一样直接传递解码后的JSON。您实际上非常接近,而且您显然对可以改进的代码很敏感:做得好!一旦有了这两个文件,就需要安排并行处理每个文件中的一行
一种方法是:
with open('TZ.txt') as file, open ('TZContents.txt') as file2:
for line in file1:
line2 = file2.next()
...
如果文件足够小,像你这样读到内存,那么你也可以考虑<代码> zip < /Cube >内置函数。
>>> list(zip(['a', 'b', 'c'], [1, 2, 3]))
[('a', 1), ('b', 2), ('c', 3)]
因此,您可以将其编码为:
with open('TZ.txt') as file, open ('TZContents.txt') as file2:
for line, line2 in zip(file1, file2):
...
我希望我们能同意,这是非常可读的,似乎使代码的意图很清楚。您实际上非常接近,而且您显然对可以改进的代码很敏感:做得好!一旦有了这两个文件,就需要安排并行处理每个文件中的一行
一种方法是:
with open('TZ.txt') as file, open ('TZContents.txt') as file2:
for line in file1:
line2 = file2.next()
...
如果文件足够小,像你这样读到内存,那么你也可以考虑<代码> zip < /Cube >内置函数。
>>> list(zip(['a', 'b', 'c'], [1, 2, 3]))
[('a', 1), ('b', 2), ('c', 3)]
因此,您可以将其编码为:
with open('TZ.txt') as file, open ('TZContents.txt') as file2:
for line, line2 in zip(file1, file2):
...
我希望我们能够同意,这是非常可读的,并且似乎可以清楚地表明代码的意图。是否要检查数组1
中的每一行以及数组中的给定行?还是要一行一行地检查这两个文件?另外,你所说的“目前还没有这样做”是什么意思?正在发生什么,你期望发生什么?我需要检查每个文件中的每一行,它们应该匹配在一起。例如。在数组中,它应该由网络ID组成,在数组2中,它包含数组中该网络的参数。这有意义吗。我需要它们同时运行,以便信息与每个文件中的每一行直接匹配。是否要针对数组中的给定行遍历数组1
中的每一行?还是要一行一行地检查这两个文件?另外,你所说的“目前还没有这样做”是什么意思?正在发生什么,你期望发生什么?我需要检查每个文件中的每一行,它们应该匹配在一起。例如。在数组中,它应该由网络ID组成,在数组2中,它包含数组中该网络的参数。这有意义吗。我需要它们同时运行,这样每个文件中的信息就可以一行一行地直接匹配,平均每个文件包含4000多行。这行吗?在这段代码中,文件是以增量方式消耗的,因此这将适用于任意大的文件。(假设您使用的是Python3.x,也就是说,在Python2上,使用itertools中的izip。)平均每个文件包含4000多行。这行吗?在这段代码中,文件是以增量方式消耗的,因此这将适用于任意大的文件。(假设您使用的是Python3.x,也就是说,在Python2上,使用itertools中的izip。)