네트워크 엔지니어를 위한 프로그래밍 기초 - 6
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 형태의 자료구조를 가지는 변수 정의하기
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)
- 문자열string을 list 자료형으로 변경
device_info_string = '1.1.1.1, username, password' <= 문자열string 자료형
device_info = device_info_string.split(',')
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_list2 변수가 없었기 때문에 에러가 남)
dev_list2 = devlist1은 됨, dev_list2라는 변수를 먼저 만들어 줬기 때문
Dev_list1을 수정을 한다고 해도 Dev_list2에는 영향을 끼치지 않음. 쉽게 말해서 윈도우에서 파일 Copy하는 개념.
List Iteration(리스트의 내용을 반복적으로 가져오는 작업)
- list에 들어있는 값value를 하나씩 가져오는 작업을 말한다.
- list에 장비 정보를 넣어서 순차적으로 하나씩 가져오는 기능. index 0 작업 끝나고 index 1 벨류가져와서 작업을 한다든지.. 등
- 파이썬을 이용한 Network Programmability에서 가장 많이 사용하는 기능중 하나이다.
- for 반복문을 이용한다.
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()함수로 앞이나 뒤에 빈 문자열(잘보면 스페이스가 있음)을 다지우고 리스트 형태로 저장