CSV循环行

2024-05-07 11:35:55 发布

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

像大多数人一样,我正试图学习python来发展我的事业等等。。。作为其中的一部分,我们正在考虑在工作中部署Cisco Meraki。由于我们将拥有大量的网络,因此能够通过API从csv文件部署信息将是非常棒的。你知道吗

我已经设法让下面的代码工作到一定程度。它将成功运行,但只运行CSV的最后一行,而不是每一行,直到没有行剩下。你知道吗

CSV大约有130行子网、ip地址和网络ID

我是如此接近,但我似乎无法理解这最后一点。你知道吗

    # actionBatch-VlanUpdate.py

import requests
import csv

# Environment Variables
API_KEY = "xxxxxx"
org_id = xxxxx
url = f"https://api.meraki.com/api/v0/organizations/{org_id}/actionBatches"

with open('Subnets.csv', newline="\n") as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
     net_id = row[3]
     V5NET = row[4]
     V5GW = row[5]
     V10NET = row[6]
     V10GW = row[7]
     V11NET = row[8]
     V11GW = row[9]



payload = {
    "confirmed": True,
    "synchronous": True,
    "actions": [
        {
            "resource": f"/networks/{net_id}/vlans",
            "operation": "create",
            "body": {
                "id": "5",
                "name": "Data",
                "applianceIp": f"{V5GW}",
                "subnet": f"{V5NET}/24",
            },
        },
        {
            "resource": f"/networks/{net_id}/vlans",
            "operation": "create",
            "body": {
                "id": 10,
                "name": "Voice",
                "applianceIp": f"{V10GW}",
                "subnet": f"{V10NET}/24",
            },
        },
        {
            "resource": f"/networks/{net_id}/vlans",
            "operation": "create",
            "body": {
                "id": 11,
                "name": "Property",
                "applianceIp": f"{V11GW}",
                "subnet": f"{V11NET}/24",
            },
        },
    ],
}

headers = {
    "X-Cisco-Meraki-API-Key": API_KEY,
    "Content-Type": "application/json",
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)

基于反馈的编辑版本

# actionBatch-VlanUpdate.py

import requests
import csv

# Environment Variables
API_KEY = "XXXX"
org_id = xxxx
url = f"https://api.meraki.com/api/v0/organizations/{org_id}/actionBatches"

with open('Subnets.csv', newline="\n") as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
     net_id = row[3]
     V5NET = row[4]
     V5GW = row[5]
     V10NET = row[6]
     V10GW = row[7]
     V11NET = row[8]
     V11GW = row[9]
        payload = {
            "confirmed": True,
            "synchronous": True,
            "actions": [
                {
                    "resource": f"/networks/{net_id}/vlans",
                    "operation": "create",
                    "body": {
                        "id": "5",
                        "name": "Data",
                        "applianceIp": f"{V5GW}",
                    "subnet": f"{V5NET}/24",
                    },
                },
                {
                    "resource": f"/networks/{net_id}/vlans",
                    "operation": "create",
                    "body": {
                        "id": 10,
                        "name": "Voice",
                        "applianceIp": f"{V10GW}",
                        "subnet": f"{V10NET}/24",
                    },
                },
                {
                    "resource": f"/networks/{net_id}/vlans",
                    "operation": "create",
                    "body": {
                        "id": 11,
                        "name": "Property",
                        "applianceIp": f"{V11GW}",
                        "subnet": f"{V11NET}/24",
                    },
                },
            ],
        }

headers = {
    "X-Cisco-Meraki-API-Key": API_KEY,
    "Content-Type": "application/json",
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)

Tags: csvnameapiidnetcreatebodyoperation
1条回答
网友
1楼 · 发布于 2024-05-07 11:35:55

在for循环中,您将覆盖上一次迭代的结果,因此它将始终是文件中的最后一行。可以使用.append()数组方法将每个循环的结果插入到各个数组的末尾。你知道吗

Edit-看起来您在for循环输出之前获取了数组的声明。如果只想调用requests 130次,只需更改缩进,这样requests调用就在for循环中。你知道吗

编辑2-您也希望在for循环中获得请求调用。你知道吗

    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
        net_id = row[3]
        V5NET = row[4]
        V5GW = row[5]
        V10NET = row[6]
        V10GW = row[7]
        V11NET = row[8]
        V11GW = row[9]
        payload = {
            "confirmed": True,
            "synchronous": True,
            "actions": [
                ...
            ],
        }

        headers = {
            "X-Cisco-Meraki-API-Key": API_KEY,
            "Content-Type": "application/json",
        }

        response = requests.post(url, json=payload, headers=headers)
        print(response.text) 

相关问题 更多 >