CSV цикл через ряды - PullRequest
       10

CSV цикл через ряды

1 голос
/ 08 ноября 2019

Как и большинство других, я пытаюсь изучить python, чтобы продвинуться по карьерной лестнице и т. Д. ... как часть этого мы смотрим на развертывание Cisco Meraki на работе. Из-за большого количества сетей, которые у нас будут, было бы здорово иметь возможность развертывать информацию из CSV-файла через API.

Мне удалось заставить приведенный ниже код работать до некоторой степени. он будет работать успешно, но будет выполняться только последняя строка CSV, а не каждая строка, пока не останется ни одной строки.

CSV - это приблизительно 130 строк подсетей, IP-адресов и идентификаторов сети

I 'Я так близко, но я просто не могу понять этот последний бит.

    # 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)

1 Ответ

0 голосов
/ 08 ноября 2019

В вашем цикле for вы перезаписываете результаты каждой предыдущей итерации, поэтому она всегда будет последней строкой в ​​файле. Вместо этого вы можете использовать метод массива .append () для вставки результата каждого цикла в конец ваших различных массивов.

Edit - похоже, что вы взяли объявление массивов перед выходом цикла for. Если вы хотите просто вызывать запросы 130 раз, вам просто нужно изменить отступ, чтобы ваши вызовы вызовов находились внутри вашего цикла 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) 
...