在CSV文件中循环以进行转移

2024-04-26 10:44:59 发布

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

大家早上好

这次我不是来问一个具体的代码问题,而是来问一个“我在正确的轨道上吗”的问题。你知道吗

我想写一个脚本,用于转移网络设备。我将得到一个包含两列的cvs列表:Hostname+HW Type,类似于:

Hostname,Type
TestAP-1,AP250
TestAP-2,AP250
TestAP-3,AP250
TestSW-1,SW100
TestSW-2,SW100
TestAP-4,AP250

真正的名单显然要长得多。你知道吗

到目前为止,我的想法是解析为HW类型调用脚本以获得主机名列表的参数。然后连接到硬件(IP地址将始终是相同的默认IP或通过串行控制台),向硬件发送一些命令(设置主机名、syslog服务器IP等),再次从机器读取值(使用show命令),并将结果写入另一个csv文件。你知道吗

比如:

staging.py AP250
get a list with all hostnames where the HW Type is AP250
loop
connect (ssh or serial) to the hardware
commands:
  set hostname 'hostname'
  set syslog ip (fixed ip address, the same for all devices)
  set whatever need to be set as well
the do a show on these settings and parse the value
write the value to a output csv file (create or append)

我走对了吗?现在,我的脚本如下所示:

import csv
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('Type', type=str,
                    help='REQUIRED: Please enter the Hardware Type (AP250, SW100, etc)')

args = parser.parse_args()

Manager = "manager.domain.com"
MACAddress = "aa:bb:cc:dd:ee:ff"

with open("input.csv", 'r', newline='') as f:

    reader = csv.DictReader(f)
    for row in reader:
        if row['Type'] == args.Type:

            print(row['Hostname']) # This will later on be replaced by some paramiko code
            h = (row['Hostname'])
            t = (row['Type'])

            outdict = {}
            print (outdict)

            """
            with open('output.csv', 'w', newline='') as o:
                writer = csv.DictWriter(o, delimiter=',', fieldnames=["Hostname", "Type", "Hivemanager", "MACAddress"])
                writer.writeheader()
                newrow = (h + "," + t + "," + Manager + "," + MACAddress)
                writer.writerow(newrow)
                #writer.writerows(['Hostname'], ['Type'], Manager)

            print (open('output.csv', 'r').read())
            """
        input("Press Enter to continue")

我不确定的地方:

  • 使用字典是正确的方法吗?你知道吗
  • 在主机名列表中循环并以正确的方式执行该循环中的所有操作吗?你知道吗

我不指望完整的工作脚本作为答案。而不是,一些提示或链接,我可以得到一些想法将是伟大的。你知道吗

非常感谢。你知道吗


Tags: csvtheto脚本列表typehostnamewriter
1条回答
网友
1楼 · 发布于 2024-04-26 10:44:59

至于你的第一个问题,使用字典是不是正确的方法,答案是双重的。首先,如果你的目标是csv阅读器,那么绝对。这是正确的方法。您以CSV格式获取输入数据,因此没有合理的方法来处理csv.DictReader。第二,输出部分;这是您希望存储返回值的地方。你不一定需要一本字典来做这件事,在我看来,列个单子会更容易些。你打算用outdict来做这个,对吗?但这又是个人品味的问题,字典也能用,只是数据的获取方式有点不同。底线是:是的,你对第一个问题的回答是正确的。你知道吗

有什么(合理的)替代方法可以循环主机名并根据每个主机名执行所有操作?这样可以最大限度地减少您必须对各个主机执行的登录操作,如果您在脚本中间断开了网络连接,则只需修复一个主机,而不必修复所有主机。你知道吗

我希望这对你有帮助。你知道吗

相关问题 更多 >