Python 如何并行处理来自两个不同文件的行

Python 如何并行处理来自两个不同文件的行,python,for-loop,Python,For Loop,我可以成功地将TZ.txt文件内容(一次一行)插入到url行中%s所在的位置,这非常有效 TZContents.txt中有json格式的数据,我需要以插入TZ.txt文件内容的相同方式将该数据插入payload='{}'括号中。目前它还没有这样做,我觉得这个设置不正确。有什么建议吗 我不关心内容文件中的剥离行,就像我处理TZ.txt文件一样 从本质上讲,在我尝试添加一个payload参数以将有效负载插入另一个文件之前,代码工作得很好,但到目前为止还没有成功。如果你需要更多的信息,请告诉我。谢谢你

我可以成功地将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。)