Networking/Network Automation

네트워크 엔지니어를 위한 프로그래밍 기초 - 6

포항돼지 2021. 5. 19. 05:53

Python Data Structure

 

Data Structure : 데이터를 저장할때 어떤 식으로 저장할지 정해놓는것.

ex) 어떤 물건을 창고에 저장할때 자주쓰는거는 앞에두고 무거운거는 뒤로 두고 이런식으로 효과적으로 구성하는 것

 

변수를 정의할때 기본적으로 이 4가지 자료구조중 하나를 정하게 됨

 

"메모리"에 데이터를 저장할때 4가지의 구조가 있음 왜? 데이터를 활용하는 방법들이 전부 다르기 때문

 

 

리스트 : 기본적으로 목록이다. 수정이 가능하다. 대괄호 [] 로 구성. 이 괄호 안에 어떠한 값들을 집어 넣음. 리스트에서 중요한 것은, 데이터에 "순서"가 있다는것. Index 0 , Index 1 .... 이런식으로 순서대로 저장이 됨. 우리는 리스트의 특정한 자료를 정할때 index값으로 사용

 

Dictionaries : 하나의 값이 Key와 Value로 이루어져 있음. 앞에는 키라고 얘기하고 뒤에는 벨류로 이루어져 있음. {K:V}

이 Value를 특별하게 지정하기위해서는 이 Key 값을 넣어서 지정함. 중요한 것은 값에 관심이 있음. 즉 순번이 없고 그 값을 뽑아내기위해 그것에 할당된 Key를 불러옴으로써 활용. 값은 리스트가 될수도있고 다른 value들이 될수도 있음. 

 

Tuples : 리스트랑 똑같다 근데 "수정"이 안된다. 소괄호로 저장되어있음() Immutable. 수정이 되면 큰일이 나는 데이터들을 define 할때 사용. 

 

Set : 중괄호{}로 값들을 지정. 중복이 없다. 어떤 그룹에 속해있는지 Check할때 set을 사용. 이 데이터가 이 group에 속해있는가 아닌가

 

 

Assignment : 하나의 데이터에 두개의 변수를 두면 , 데이터가 바뀔때 2개의 변수값도 바뀜. 그저 데이터가 변수를 바라보고 있기때문에 그저 데이터들을 변수에 Assign한 상황

Copy : Copy함수를 쓰면 실제로 데이터를 그대로 복제를 해서 그 데이터를 다른 메모리에 복제를 해놓기 때문에 똑같은 데이터를 다른곳에 저장 하는 방식

 

 

 

List (리스트) [ . . . ]

- 자료형은 메모리에 데이터를 저장하는 저장 구조이다.

- list 자료형은 각각의 값들이 순서를 가지고 있다. (sequence) (Index)

- list 자료형은 필요에 따라서 값들을 추가하거나 삭제할 수 있다. (mutable = 수정이 가능함) (중간에다가 추가할수도있고 아무때나 새롭게 modify가 가능하다)

- list 자료형은 값을 리스트로 가질수도 있다.

- 중간은 쉼표로 구분, 모두다 문자열로 구분

- 리스트 안의 데이터는 문자열, 숫자, 다 올수 있음

 

 

 

 

코딩 하는 과정에서 이렇게 미리 리스트를 정해야할 때도 있다
이렇게 List 함수 써서도 구분 가능

list 형태의 자료구조를 가지는 변수 정의하기

1) list( ) 함수를 이용하여 값이 들어있지 않은 list 자료형 변수 정의

my_list = list( )

2) [ ] (대괄호)를 이용하여 내용이 비어있는 list 자료형 변수 정의하기

my_list = [ ]

- 비어 있는 자료형은 코드의 진행에 따라서 나중에 내용이 들어가게 된다.

3) 값이 들어있는 list 자료형 변수 정의하기

dev_info = ['1.1.1.1', 'username', 'password']

id(dev_info) 변수가 존재하는 메모리의 위치값을 표시

 

아직 다른 파이썬 자료 구조 타입을 배우지 않았지만, 다른 자료 저장 구조 타입을 list로 바꿀 수 있다.

(이 부분은 건너 띠고, 이번 Chapter가 종료된 이후에 다시 학습하여도 좋겠다)

- list( ) 함수를 이용하여 tuple 자료형을 list 자료형으로 변경

device_tupel = ('1.1.1.1', 'username', 'password')

device_list = list(device_tuple)

Tuple은 수정이 안되는 데이터 타입이다 근데 list()함수를 통해 Tuple 데이터 타입을 리스트 형식으로 출력은 가능하다

 

- 문자열string을 list 자료형으로 변경

device_info_string = '1.1.1.1, username, password' <= 문자열string 자료형

device_info = device_info_string.split(',')

 

이렇게 String을 .split(',')함수를 이용, 안의 콤마 마다 끊어서 List로 만들기도 가능

 

 

 

device_info = [] #empty list def 변수를 리스트로 미리 지정

file = open('datas' , 'r') 읽기 전용(수정 X)으로 오픈
file_line = file.readline().strip() 1라인 읽기

print('read 1 line:' , file_line) 라인 읽은거 표시

device_info = file_line.split(',') 콤마 기준으로 나눠서 리스트에 넣기
print(device_info) 보여주기

file.close() 파일 닫기

 

 

Dev_list1과 Dev_list2가 동일한 메모리 저장 값을 갖고 있음

Dev_list1 = Dev_list2 (Dev_list2 변수가 없었기 때문에 에러가 남)

dev_list2 = devlist1은 됨, dev_list2라는 변수를 먼저 만들어 줬기 때문

 

이렇게 from copy import copy functino을 이용하면, 위와같이 다른 메모리 저장값을 갖게되어 dev_list1이 없어져도 dev_list2가 값을 계속 keep할수 있게 되는 것

Dev_list1을 수정을 한다고 해도 Dev_list2에는 영향을 끼치지 않음. 쉽게 말해서 윈도우에서 파일 Copy하는 개념.

 

 

 

List Iteration(리스트의 내용을 반복적으로 가져오는 작업)

- list에 들어있는 값value를 하나씩 가져오는 작업을 말한다.

- list에 장비 정보를 넣어서 순차적으로 하나씩 가져오는 기능. index 0 작업 끝나고 index 1 벨류가져와서 작업을 한다든지.. 등

- 파이썬을 이용한 Network Programmability에서 가장 많이 사용하는 기능중 하나이다.

- for 반복문을 이용한다.

 

for 변수 아무거나 in 리스트 이름 print(변수)

 

 

 

List comprehension(이해력,자동화시키기)

 

네트워크 엔지니어는 자동화 할때 리스트 안의 리스트, 즉 List comprehension 기능을 이용해서 코드를 많이 짠다.

이런식으로 리스트 안에 인덱스를 이용해서 또 다른 리스트를 불러오게 할수 있음

 

이렇게 변수 = 리스트 한다음 또다른 변수리스트 = 아까 정의 해놓은 변수 넣어서 만들수 있음;

 

 

이렇게 리스트가 들어가 있는것이 확인이 된다. 근데 잘 안보이니까 pprint기능을 이용 좀더 이쁘게 정리 가능

 

이렇게 나온다

 

List Comprehensions for Creating Lists(Advanced된 문자열을 리스트를 정의하는 방식)

- Advanced Topic

- Shortcut for creating lists; useful but can be a little confusing

 

문자열을 쉼표를 기준으로 데이터를 쪼개고 각자 데이터를 리스트로 저장하는 방식

 

for 문을 써서 item 변수에 데이터를 분리 dev_info안의 문자열을 쉼표(,)기준으로 나누기

그리고 item변수를 .strip()함수로 앞이나 뒤에 빈 문자열(잘보면 스페이스가 있음)을 다지우고 리스트 형태로 저장