2017-11-29 6 views
-2

물에 갇혀 있습니다. 나는 단지 파이썬으로 시작하고있다, 여기에 배경과 내가 이루고자하는 목표는 ...사전/아이디어 루핑?

배경 :나는 44 개의 네트워크 스위치로 각각 telnet과 ssh 연결을 지원한다. 나는 또한 각 장치의 구성을 가진 우분투 아파치 서버 ("Nipper"라고 불리는 도구 인 http://sectools.org/tool/nipper/)를 파싱했다. 니퍼는 우리가 필요로하는 것에 잘 작동합니다. 나는 프로그래밍에서 공통적 인 용어가 무엇인지에 대한 기본적인 이해를 가지고있다. (목록, 튜플, 사전 등)하지만 코딩 경험이 부족하다.

달성하려는 목표 : 텔넷/SSH를 통해 각 스위치에 자동으로 연결하고 각 스위치의 구성을 가져 오는 의도로 파이썬 프로그램을 작성하기 시작했습니다. 기능적인 스크립트를 얻은 후에, "Cron"을 사용하여 매주 작업 일정을 잡아 네트워크 문서를 업데이트 할 계획입니다.

내가 갇혀있는 곳/도움과 아이디어를 사용할 수있는 곳 : 아래의 코드에서 "/var/www/html/Directory.txt"파일을 사전 "d"로 읽음을 이해합니다. 사전에 각 항목에 대한 순차적 루프를 만들어 장치 "IP"에 텔넷하여 "running-config"를 가져 와서 "outfile"/ var/www/html/Test_Output에 구성을 저장합니다. .csv ".

각 항목에 대해이 루프 프로세스를 시작하고 별도의 변수/엔티티로 "IP"및 "파일 이름"을 참조 할 수있는 코드 구조를 얻으려면 모든 도움이 필요합니다. 더 많은 경험을 가진 사람들을 위해 "참조 파일"을 사용하여 "IP"및 "파일 이름"값을 변수로 사용할 수 있습니까? 아니면 파일 형식을 변경해야합니까? 지금까지

내 코드 :

#! /usr/bin/env python3 
    import csv 

    d = {} 
    with open('/var/www/html/Test_Output.csv', mode='w') as outfile: 
     with open('/var/www/html/Directory.txt.bak', mode='r') as infile: 
     reader = csv.reader(infile) 
     writer = csv.writer(outfile) 
     for row in infile: 
      rows = (line.split(",") for line in infile) 
      d = { row[0]:row[1:] for row in rows } 
    print(d) 
    #print(d['"01"']) 


    #dlist = d.items() 
    #dlist.sort() 
    #print(dlist) 
    #for key, filename in dlist: 
    # print(key, filename) 

내 참조 파일 : "/var/www/html/Directory.txt" 공지 사항 순서는 ... 순차 키, IP 주소 전체 경로 생성 에 - 파일 이름

"1",172.16.255.183,/var/www/html/Admin/AdminBld-3.html 
    "2",172.16.255.201,/var/www/html/Admin/AdminBldg-1.html 
    "3",172.16.255.115,/var/www/html/AV/AV-1.html 
    "4",172.16.255.198,/var/www/html/MC/MC-198.html 
    "5",172.16.255.101,/var/www/html/MC/MC-1.html 
    "6",172.16.255.102,/var/www/html/MC/MC-2.html 
    "7",172.16.255.103,/var/www/html/MC/MC-3.html 
    "8",172.16.255.104,/var/www/html/MC/MC-4.html 
    "9",172.16.255.105,/var/www/html/MC/MC-5.html 
    "10",172.16.255.106,/var/www/html/MC/MC-6.html 
    "11",172.16.255.108,/var/www/html/MC/MC-8.html 
    "12",172.16.255.109,/var/www/html/MC/MC-9.html 
    "13",172.16.255.2,/var/www/html/MDF/MDF-2.html 
    "14",172.16.255.1,/var/www/html/MDF/MDF-4507.html 
    "15",172.16.255.160,/var/www/html/RAM/RAM-2960-1.html 
    "16",172.16.255.161,/var/www/html/RAM/RAM-2960-2.html 
    "17",172.16.255.107,/var/www/html/SAC/SAC-1.html 
    "18",172.16.255.111,/var/www/html/TR/TR1/TR1-1.html 
    "19",172.16.255.112,/var/www/html/TR/TR1/TR1-2.html 
    "20",172.16.255.113,/var/www/html/TR/TR1/TR1-3.html 
    "21",172.16.255.114,/var/www/html/TR/TR1/TR1-4.html 
    "22",172.16.255.121,/var/www/html/TR/TR2/TR2-1.html 
    "23",172.16.255.122,/var/www/html/TR/TR2/TR2-2.html 
    "24",172.16.255.123,/var/www/html/TR/TR2/TR2-3.html 
    "25",172.16.255.124,/var/www/html/TR/TR2/TR2-4.html 
    "26",172.16.255.126,/var/www/html/TR/TR2/TR2_5.html 
    "27",172.16.255.131,/var/www/html/TR/TR3/TR3-1.html 
    "28",172.16.255.132,/var/www/html/TR/TR3/TR3-2.html 
    "29",172.16.255.133,/var/www/html/TR/TR3/TR3-3.html 
    "30",172.16.255.134,/var/www/html/TR/TR3/TR3-4.html 
    "31",172.16.255.141,/var/www/html/TR/TR4/TR4-1.html 
    "32",172.16.255.142,/var/www/html/TR/TR4/TR4-2.html 
    "33",172.16.255.143,/var/www/html/TR/TR4/TR4-3.html 
    "34',172.16.255.144,/var/www/html/TR/TR4/TR4-4.html 
    "35",172.16.255.145,/var/www/html/TR/TR4/TR4-5.html 
    "36",172.16.255.151,/var/www/html/TR/TR5/TR5-1.html 
    "37",172.16.255.152,/var/www/html/TR/TR5/TR5-2.html 
    "38",172.16.255.153,/var/www/html/TR/TR5/TR5-3.html 
    "39",172.16.255.181,/var/www/html/TR/TRSW/TRSW-1.html 
    "40",172.16.255.184,/var/www/html/TR/TRSW/TRSW-3.html 
    "41",172.16.255.171,/var/www/html/TR/TRTC/TRTC-1.html 
    "42",172.16.255.172,/var/www/html/TR/TRTC/TRTC-2.html 
    "43",172.16.255.173,/var/www/html/TR/TRTC/TRTC-3.html 
    "44",172.16.255.175,/var/www/html/TR/TRTC/TRTC_5.html 

현재 스크립트 출력 :

{'"4"': ['172.16.255.198', '/var/www/html/MC/MC-198.html\n'], '"38"': ['172.16.255.153', '/var/www/html/TR/TR5/TR5-3.html\n'], '"16"': ['172.16.255.161', '/var/www/html/RAM/RAM-2960-2.html\n'], '"20"': ['172.16.255.113', '/var/www/html/TR/TR1/TR1-3.html\n'], '"40"': ['172.16.255.184', '/var/www/html/TR/TRSW/TRSW-3.html\n'], '"10"': ['172.16.255.106', '/var/www/html/MC/MC-6.html\n'], '"3"': ['172.16.255.115', '/var/www/html/AV/AV-1.html\n'], '"14"': ['172.16.255.1', '/var/www/html/MDF/MDF-4507.html\n'], '"9"': ['172.16.255.105', '/var/www/html/MC/MC-5.html\n'], '"39"': ['172.16.255.181', '/var/www/html/TR/TRSW/TRSW-1.html\n'], '"43"': ['172.16.255.173', '/var/www/html/TR/TRTC/TRTC-3.html\n'], '"41"': ['172.16.255.171', '/var/www/html/TR/TRTC/TRTC-1.html\n'], '"30"': ['172.16.255.134', '/var/www/html/TR/TR3/TR3-4.html\n'], '"7"': ['172.16.255.103', '/var/www/html/MC/MC-3.html\n'], '"32"': ['172.16.255.142', '/var/www/html/TR/TR4/TR4-2.html\n'], '"29"': ['172.16.255.133', '/var/www/html/TR/TR3/TR3-3.html\n'], '"33"': ['172.16.255.143', '/var/www/html/TR/TR4/TR4-3.html\n'], '"37"': ['172.16.255.152', '/var/www/html/TR/TR5/TR5-2.html\n'], '"17"': ['172.16.255.107', '/var/www/html/SAC/SAC-1.html\n'], '"28"': ['172.16.255.132', '/var/www/html/TR/TR3/TR3-2.html\n'], '"27"': ['172.16.255.131', '/var/www/html/TR/TR3/TR3-1.html\n'], '"2"': ['172.16.255.201', '/var/www/html/Admin/AdminBldg-1.html\n'], '"11"': ['172.16.255.108', '/var/www/html/MC/MC-8.html\n'], '"12"': ['172.16.255.109', '/var/www/html/MC/MC-9.html\n'], '"22"': ['172.16.255.121', '/var/www/html/TR/TR2/TR2-1.html\n'], '"44"': ['172.16.255.175', '/var/www/html/TR/TRTC/TRTC_5.html\n'], '"34\'': ['172.16.255.144', '/var/www/html/TR/TR4/TR4-4.html\n'], '"1"': ['172.16.255.183', '/var/www/html/Admin/AdminBld-3.html\n'], '"15"': ['172.16.255.160', '/var/www/html/RAM/RAM-2960-1.html\n'], '"26"': ['172.16.255.126', '/var/www/html/TR/TR2/TR2_5.html\n'], '"35"': ['172.16.255.145', '/var/www/html/TR/TR4/TR4-5.html\n'], '"6"': ['172.16.255.102', '/var/www/html/MC/MC-2.html\n'], '"21"': ['172.16.255.114', '/var/www/html/TR/TR1/TR1-4.html\n'], '"25"': ['172.16.255.124', '/var/www/html/TR/TR2/TR2-4.html\n'], '"24"': ['172.16.255.123', '/var/www/html/TR/TR2/TR2-3.html\n'], '"23"': ['172.16.255.122', '/var/www/html/TR/TR2/TR2-2.html\n'], '"19"': ['172.16.255.112', '/var/www/html/TR/TR1/TR1-2.html\n'], '"8"': ['172.16.255.104', '/var/www/html/MC/MC-4.html\n'], '"36"': ['172.16.255.151', '/var/www/html/TR/TR5/TR5-1.html\n'], '"18"': ['172.16.255.111', '/var/www/html/TR/TR1/TR1-1.html\n'], '"13"': ['172.16.255.2', '/var/www/html/MDF/MDF-2.html\n'], '"5"': ['172.16.255.101', '/var/www/html/MC/MC-1.html\n'], '"31"': ['172.16.255.141', '/var/www/html/TR/TR4/TR4-1.html\n'], '"42"': ['172.16.255.172', '/var/www/html/TR/TRTC/TRTC-2.html\n']} 
+1

"내 코드는 제 이해입니다 ..."? 너는 그것을 썼지 만 그것이 무엇을하는지 확신하지 못하는가? –

+2

당신은 csv 리더'reader = csv.reader (infile)'을 만들고 있지만 그것을 사용하지 않고 파일의 'raw'라인을 루핑합니다. 그게 의도적 인거야? –

+0

당신의 요구에 따라 사전'd' 출력이 (일종의) 확인을합니다. 키에는 이중 따옴표가 약간 있지만 수정하기 쉽습니다. 값은 첫 번째 목록 항목으로 IP가 있고 두 번째 목록 항목으로 파일 이름이있는 두 항목 목록입니다 (후행 줄 바꿈이 있지만 쉽게 다시 고칠 수 있습니다.) 그래서 ... 정확한 문제는 무엇입니까? 지금까지 무엇을 가지고 있었습니까? 무엇을 할 수 없습니까/이해할 수 있습니까? –

답변

0

내가 근래 경우 (사전 "D"를이어야 함) 전자가 당신을 올바르게 이해했다면, 당신이 원하는 것은 순차적으로 IP에 액세스하고 그 후에 몇 가지 조치를 취하는 것입니다.

귀하의 사전에있는 키에 추가 인용 부호가 있습니다. d [ '4']를 표시해보십시오. 오류가 발생합니다. 이것을 제거하려면 파이썬의 내장 csv 리더 모듈을 사용해야합니다. 이 같은

뭔가 잘 작동합니다 :

with open('coors.csv', mode='r') as infile: 
    reader = csv.reader(infile) 
    with open('coors_new.csv', mode='w') as outfile: 
     writer = csv.writer(outfile) 
     mydict = {rows[0]:rows[1] for rows in reader} 

지금 어디 보자 방법을 수행 할 수 있습니다 DICT을 통해 루프.

for key in d: 
    serialNo = key 
    correspondingIP = d[serialNo][0] 
    correspondingFilename = d[serialNo][1] 

이 당신을 도움이 여분의 따옴표를 제거합니다 : Remove quotes in python dictionary

이 도움이된다면 :

+0

beginner007, 이것은 본질적으로 내가 찾고있는 것입니다. 이 코드는 사전에 "correspondingIP"및 "correspondingFilename"이라는 목록에서 2 개의 변수를 만듭니다. telnet 스크립트에서이 변수들을 사용하여 내가 성취하고자하는 것을 할 수 있습니다! 나는 이것을 시험하고 알릴 것이다! – cojohnson

+0

내가 도울 수있어서 기뻐요! –

+0

Stackoverflow에서 나의 평판을 높이려고합니다. 내 대답에 +1을 사용할 수 있습니다. 감사합니다 : D –

0

감사합니다 모든 사람을 나를 위해이보고 시간을내어 알려주세요! 내가 파이썬 초보자라고 말했듯이.나는 또한 아이디어와 생각을 게시하는 데 시간을 할애하여 많이 배운 소프트웨어 정의 네트워킹 (SDN)의 기본 사항을 얻으려고합니다.

#! /usr/bin/env python3 
import csv 

d = {} 
with open('/var/www/html/Test_Output.csv', mode='w') as outfile: 
    with open('/var/www/html/Directory.txt', mode='r') as infile: 
    reader = csv.reader(infile) 
    writer = csv.writer(outfile) 
    for row in infile: 
     rows = (line.split(",") for line in infile) 
     d = { row[0]:row[1:] for row in rows } 
#print(d) 

for key in d: 
    serialNo = key 
    correspondingIP = d[serialNo][0] 
    correspondingFilename = d[serialNo][1] 
    print(serialNo, correspondingIP, correspondingFilename) 

지금, 나는 각 사전 항목 (키, IP 주소, 파일 이름)를 개별적으로 쉽게 참조 할 수있는만큼 기분 :

는 지금 여기 내 코드입니다. 이 코드는 각 장치의 구성을 원격으로 가져올 수있는 견고한 기반이되어야합니다.

감사합니다.