스터디/Python

5. 모듈과 파일

elenalee 2024. 5. 3. 19:12

1. Module

모듈과 패키지, 라이브러리 

- 모듈 : 클래스, 함수, 상수의 집합 

- 패키지 : 하위 패키지 및 모듈의 집합 

- 라이브러리 : 패키지 및 모듈의 집합 

 

모듈

-  1개의 파이썬 파일 (패키지는 폴더)

- 함수, 상수, 클래스를 주제 지향적으로 모아놓은 집합체 

  클래스 : 다른 모듈의 확장, 함수 : 특정작업의 처리, 상수(변수) : 불변의 값 

 

1) 모듈 사용

모듈 전체의 식별자를 가져오는 import

   - 파이썬 모듈을 프로그램 내부에서 사용할수 있도록 namespace에 추가해 주는 명령어

   - 구문형식 : import 모듈이름 [as 별칭] 

   - 모듈이름/별칭.함수(), 모듈이름/별칭.변수, 모듈이름/별칭.클래스  

 

모듈 내의 특정한 메서드를 가져오는 from ~ import

   - 구문형식 : from 모듈이름 import 메서드1,(메서드2/함수/클래스...)

                     from 모듈이름 import* (모듈안의 모든 메서드를 가져옴)

   - 모듈 이름없이 변수, 함수, 클래스 사용  

등록확인 : dir() namespace에 등록되어 있는 이름들을 리스트로 반환 (import 후에 사용가능)

                예 ) dir(math)

함수기능확인 : help() 대화형 도움말 시스템 호출 또는 클래스나 메소드 사용방법 반환 

                예) help(math.abs), help("python".upper)

 

namespace 

특정 객체를 이름에 따라 구분할수 있는 범위 ( namespace상의 객체명 중복시 오류발생 )

지역 NS : 함수 또는 메서드 내의 이름공간 (scope)

전역 NS : 모듈 전체에서 통용되는 이름공간 

빌트인 NS : 모든 코드범위 

 

④ 모듈의 제거

- namespace내 module의 멤버 식별자 제거

del 등록된 모듈이름 

 

2) 유용한 모듈

math 모듈 

- 수학적 계산문제를 해결하기 위한 수학적 함수 및 상수의 집합 

- C 표준에 정의된 수학적 계산함수 내장, 𝝅 와 𝑒등의 상수 제공

- pi,e(자연로그), fabs(), ceil(),floor(),exp(),log(),sqrt(),sin(),asin(),cos(),tan(),degrees(x)

** from math import sin, radians 형태로 namespace에 불러옴 

 

random 모듈 

- 난수(random number): 특정한 배열 순서나 규칙적인 의미가 없는, 임의의 수를 의미

- 난수 관련된 생성 기능을 제공하는 모듈(특정 범위의 난수를 발생)

   RNG(난수발생기 Random Number Generator) 번호 발생 경향이 비슷할수 있어,

   시작점(seed)의 변형을 주어 패턴을 변형. 

- random() 0~1사이의 난수,

   random randint(a,b) : a,b사이의 숫자중 난수발생,

   randrange(a,b,c) : a,b사이의 c간격으로 나열된 숫자중 난수발생

- list자료형에 사용하는 random모듈의 메서드 (반드시 sequence)로 들어가야 하며

   choice(sequence) 주어진 항목 중 랜덤하게 반환, (1,9)이렇게 주어지면 1과 9중에서만 선택

   sample(sequence) 리스트가 주어질때 그중에서 임의로 여러개를 선택

   shuffle(sequence) 시퀀스를 랜덤하게 섞어줌

** 조건문 if 내부의 in은 비교연산자 (존재하는지 판단, for문의 in과 다른 의미) 

 

** randint : 정수를 랜덤하게 발생시킴 

 

time 모듈

에포크 시간을 얻어 다양한 형식으로 표시하는 기능 제공

유닉스 에포크 (1970-01-01 00:00:00 GMT) 

- time(): 에포크이후 누적된 초(실수형태)반환 , gmtime(): struct_time형식으로 기준 시각변환,

   localtime(time), strftime(str, time)지정된 형시으로 시각변환, ctime()현재시각,

   sleep(n) 현재 동작중인 프로세스를 n초만큼 멈춤 

 

4. 파일 

- 컴퓨터에 의해 처리될 데이터와 이미 처리된 데이터나 정보임시적으로 저장된 상태

- 일련의 연속된 바이트, 프로그램(파이썬)에 읽혀져 가공.처리 

 

1) 파일의 구성

- 연속된 바이트, 파일의 시작, 파일포인터, 파일의 끝(EoF)

 

① 파일의 종류

- 데이터가 저장방식에 따라 텍스트와 바이너리 파일로 구분, 바이너리 파일이 널리 사용 

- 텍스트 파일 : 데이터를 구성하는 개별문자를 엔코딩 체계를 통해 바이트로 변경, 연속적으로 저장 

- 텍스트 에디터(메모장 등)로 열어서 식별가능(텍스트), 식별불가(바이너리)

   

텍스트 파일 : 199를 문자로 저장(ASCII코드이면 각 문자에 상응하는 바이트로 저장, 코드 읽어 화면출력)

바이너리 파일 : 199를 실제 값으로 해석, 해당 값에 해당하는 1바이트로서 저장(적은 공간에 저장가능) 

 

 

② 파일 함수 

- 파일의 시작, 파일포인터, 파일의 끝을 활용한 데이터 읽기, 쓰기를 위한 함수와 메서드 내장 

- open(): file obj   파일과 연결된 파일 객체생성

- read()    특정개수 문자반환

- readline()   한라인의 문자열반환

- readlines():list   전체라인의 문자열을 리스트로 반환

- write(s: str)  파일에 문자열 작성, 

- close()   파일닫기

- 물리적인 파일과 연결된 파일객체를 생성하고 참조변수에 할당하여 활용 

   구문 형식 : 파일객체_참조변수 = open(파일이름, 모드)

- 모드 'r' : 읽기 용도, 'w' : 새로운 파일을 쓰기 용도, 'a': 파일끝에 새로운 데이터를 덧붙이는 용도

   ( 바이너리 사용을 위한 모드가 별도로 존재함 )

 

파일 이름 

- 파일에 접근하기 위한 모든 정보 (파일의 위치를 가리키는 경로정보 포함)

- 파이썬 사용 시 파이썬 프로그램이 텍스트 파일과 같은 폴더에 있다면 앞의 경로 생략가능 

 

 

2) 파일 이용 

 

① 파일 읽기 (read mode)

- 파일로부터 특정 범위의 데이터를 읽어 문자열로 반환(파일 포인터 이동을 동반)

**readline은 개행표인터('\n')표시까지 읽어들임

 

예) 파일을 읽고 출력

      khan_fp.readlines() : 전체를 읽어들임 , khan_fp.close() : 파일 종료 

      readlines (khan_fp) (X, 이 부분에서 이러한 적용은 불가능) 

** 매줄마다 "\n"(개행문자)이 있으므로 줄바뀜이 추가됨, strip으로 개행문자 삭제시 추가적인 줄바뀜 없음

 

② 파일 쓰기 (write mode)

- 이름을 생성하고 포인터를 파일의 맨처음에 위치 (문자열이 파일 포인터가 위치한 지점에 기록)

   w모드로 존재하는 파일 오픈시 기존에 동일명 파일이 있다면 모든 데이터 삭제

- 데이터가 기록되면서 파일 포인터도 함께 이동 ('\n'을 추가해야 함)

  예) 파일 생성 및 저장 

   p_fp = open("Python_guide.txt", "w")

   p_fp.write("Python\n")

   p_fp.write("1st grade class \n")

   p_fp.close() : 닫지 않으면 파일이 생성되지 않을수 있음 

→  저장된 내용 : Python₩n1st grade class₩n

 

③ 데이터 추가 (append mode)

- 파일의 끝에 데이터를 덧붙이는 작업

- 파일 오픈 시 파일 포인터를 EoF로 이동 , 존재하지 않는 파일의 경우 write와 동일 

 

예) 파일에 내용추가 



3) 시퀀스

순서화된 값의 집합체를 저장할수 있는 데이터 타입 

- 단일 식별자로 연속된 저장 공간 접근수단 제공

- 개별 원소의 값을 수정, 추가, 삭제가능 

- 원소(element)의 나열을 저장할 수 있는 타입 : 리스트, 세트, 튜플, 딕셔너리

  리스트, 세트, 튜플 : 저장된 번지수(인덱스)를 기준으로 값에 접근 

  딕셔너리 : 항목으로 구성 ( 키를 이용하여 값에 접근 , 항목 : 키+값)

 

** 모듈 제거 : 오류 발생시 해당 모듈을 namespace에서 제거해 볼수 있음

** namespace : 프로그램 내부에서 식별자들이 사용되는 공간 (모듈,변수,함수이름 : scope)

 

 Dictionary 활용 

- 키와 값의 쌍(pair)를 저장하는 시퀀스, {키:값, ... 키:값} 형태로 표시

- 생성, 수정, 삭제의 lifecycle이 있음 

 

 

- 구문 형식, (키의 값은 세트, 리스트, 딕셔너리 자료형 불가)

   딕셔너리 생성 

   딕셔너리 생성과 동시에 값대입 : 딕셔너리_이름 = {키1:값1, 키2:값2, .. 키n:값n} 

   비어있는 딕셔너리 생성 : 딕셔너리_이름 = {}, 딕셔너리_이름=dict{ }

   값가져오기 : 변수 = 딕셔너리_이름[key]

- 추가/삭제 구문 형식 : 딕셔너리_이름[키] = 값 , del 딕셔너리_이름[키]

- 딕셔너리의 멤버

  keys(): tuple 포함된 모든 키 반환, values() : 포함된 모든 값을 tuple로 반환 

  items(): tuple (키,값)형태의 튜플로 모든 항목반환, clear():none 모든항목 삭제

  get(key):value 해당하는 키가 있으면 값를 반환, pop(key):value 값 반환후 삭제,

  popitem():tuple 무작위 1개 반환후 삭제

- 순회 (traversal) 각각의 항목을 순서대로 한번씩만 방문하는 과정 

   for keys in dictionary : 

         print(key+":"+str(dictionary[key]))

         key를 사용하는 프로그램 블록 

 

예) 딕셔너리를 이용한 프로그램 사례 (키에 단어를 넣고, value에 반복횟수를 넣음)

  ** 인용부호를 strip에 넣을때는 newline character(문자열 끝) 인식하지 않도록 \추가하여 "\"로 설정

      dictionary의 단어를 가져오는 함수 .get()

      word-dict의 항목을 키와 값을 바꾸어 출현횟수값이 키이고 단어가 값인 word_r_dict로 재구성

      word_r_dict를 출현횟수별로 정렬(sorted(), 내림차순)한 후 키가 워드인 word_dict로 재구성 

      word_dict의 값(word_dict[key])이 특정 이상인 키를 출력

 

 

 

 

'스터디 > Python' 카테고리의 다른 글

6. 실습 - 게임구현  (0) 2024.05.04
4. 함수와 객체  (0) 2024.05.02
3. 구조와 제어  (0) 2024.04.21
2. 파이썬 Basic  (0) 2024.04.20
1. 정보 및 컴퓨터 구성  (0) 2024.04.20