Создание словарей для связи слов с числами - PullRequest
0 голосов
/ 09 марта 2020

Я пишу скрипт, который работает на одном устройстве (занимаюсь автоматизацией). Например, у меня есть устройство с IP-адресом, поэтому в настоящее время у меня есть настройки кода с переменной. ip1 = 127.0.0.1.

Но теперь я хочу иметь возможность касаться примерно 100 устройств, поэтому я хочу создать файл или лучшую рекомендацию, например, иметь:

Device 1 127.0.0.1
Device 2 127.0.0.2

После вызова сделан либо для, либо, код выполняется. Я думаю, что лучший способ - создать «файл словаря». Может ли кто-нибудь указать мне правильное направление для этого? Или я буду создавать файл CSV с двумя столбцами? Каков наилучший метод рекомендации? Кто-то, казалось, сказал мне создать файл словаря, но я не уверен, что это влечет за собой.

Мой код в настоящее время что-то вроде

ip1 = "127.0.0.0.1"

username = "username"
password = "password"

print("\nHello, user You are connecting to ", ip, "\n")

ssh_conn = paramiko.SSHClient()
ssh_conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_conn.connect(ip, port=22, username=username,
                     password=password,
                     look_for_keys=False, allow_agent=False)

Так что просто для пояснения, Я пытаюсь заменить ip1 = файлом, в котором будет храниться почти 10-100 IP-адресов, и на основании «имени устройства» будет выполняться код.

Я знаю, что пример выглядит следующим образом:

released = {
    "iphone": 2007,
    "iphone 3G": 2008,
    "iphone 3GS": 2009,
    "iphone 4": 2010,
    "iphone 4S": 2011,
    "iphone 5": 2012
}

for item in released:
    if "iphone 5" in released:
        print("Key found")
        break
    else:
        print("No keys found")

Но что мне делать, если я собираюсь добавить 100 ключевых значений?

EDIT

Я go эта идея,

with open('inventory.txt', 'r') as f:
    answer = {}
    for line in f:
        line = line.split()
        if not line:
            continue
        answer[line[0]] = line[1:]

id = "1299"
for i in answer[store_num]:
    host = i
    ssh = ConnectHandler(device_type='cisco_ios', host=host, username='asd', password='asdsssasd')
    print("\nConnection successful with: ", host, "\n")
    out = ssh.send_command(command)
    print(out)

Но я получаю сообщение об ошибке подключения к чему-либо.

Ответы [ 3 ]

1 голос
/ 09 марта 2020

Я цитирую ваш вопрос:

Кто-то, кажется, сказал мне, чтобы создать файл словаря, но я не уверен, что это влечет за собой.

увидеть это .

в вашем сценарии это будет выглядеть так:

ip_adresses = {
  "Device 1": "127.0.0.1",
  "Device 2": "127.0.0.2"
}

, тогда вы запустите его так:

for device, ip in ip_adresses.items():
    print("This is " + device + ". IP Address: " + ip)

Окончательный код:

device_you_are_using = "Device 2"

ip_addresses = {
  "Device 1": "127.0.0.1",
  "Device 2": "127.0.0.2"
}

for device, ip in ip_addresses.items():
    if device_you_are_using == device:
        print("This is " + device + ". IP Address: " + ip)
1 голос
/ 09 марта 2020

Вы можете использовать файл CSV для хранения всех IP-адресов и соответствующих им имен хостов, например,

Device 1,127.0.0.1
Device 2,127.0.0.2

Затем вы можете использовать встроенный в csv модуль питонов для чтения этих данных в словарь, например

import csv

info = {}
with open("master.csv", "r") as file:
    reader = csv.reader(file)
    for item in reader:
        info[item[0]] = item[1]

Тогда вы можете спросить пользователя, какое имя устройства подключать?

device = input("Device name: ")
ip = info.get(device, None) #--> get the ip address from the info dict

Если IP-адрес не None, то вы сможете подключиться Пользователь. Надеюсь, это поможет.

0 голосов
/ 09 марта 2020

Завершено с помощью этого для использования текстового файла вместо CSV.

with open('inventory.txt', 'r') as f:
    answer = {}
    for line in f:
        line = line.split()
        if not line:
            continue
        answer[line[0]] = line[1:]

data_number = input("INFO: Enter Device Number: ")
for i in answer[data_number]:
    host = i
...