본문 바로가기
Programming/Python

18. 표준 모듈

by IT learning 2021. 3. 23.
728x90

오늘은 파이썬에서 자주 사용하는 모듈 이라는 기능을 공부해보겠다.

 

 

파이썬은 모듈이라는 기능을 활용해 코드를 분리하고 공유한다.

모듈이란 여러 변수와 함수를 가지고 있는 집합체로, 크게 표준 모듈 외부 모듈로 나눈다.

기본적으로 내장되어 있는 모듈을 '표준 모듈'이라고 부르고, 다른 사람들이 만들어서 공개한 모듈을 '외부 모듈'이라고 한다.

 

모듈 사용의 기본: math 모듈

math 모듈은 이름 그대로 수학과 관련된 기능을 가지고 있다.

import math
print(math.sin(1))
print(math.cos(1))
print(math.tan(1))
print(math.floor(2.5)) # 내림값
print(math.ceil(2.5))  # 올림값

사용법은 위 코드와 같다. import 로 원하는 모듈을 불러와서 해당하는 기능들을 사용하면 된다.

math 모듈은 많은 기능을 가지고 있다. 몇가지를 표로 정리해보았다.

변수 또는 함수 설명
sin(x) 사인값을 구합니다.
cos(x) 코사인값을 구합니다.
tan(x) 탄젠트값을 구합니다.
log(x[, base]) 로그값을 구합니다.
ceil(x) 올림합니다.
floor(x) 내림합니다.

math 모듈의 많은 기능 중 일부분을 가져와 본것이다. 이외에도 엄청 많으니 궁금하면 docs.python.org/ko/3/library/index.html

위 사이트로 들어가보면 많은 모듈들이 설명되어있다.

 

from 구문

모듈에는 정말 많은 변수와 함수가 들어있다.

하지만 그중에서 우리가 활용하고 싶은 기능은 극히 일부일 수 있으며, math.cos() 나 math.sin() 과 같이 앞에 무언가를 계속 입력하는 것이 귀찮다고 할 수도 있다.

 

이때에 from 구문을 사용한다.

from 모듈 이름 import 가져오고 싶은 변수 또는 함수
from math import sin, cos, tan, floor, ceil
print(sin(1))
print(cos(1))
print(tan(1))
print(floor(2.5)) # 내림값
print(ceil(2.5))  # 올림값

위 코드는 from 구문을 사용해본 예시이다.

from 구문을 사용하여 자주 사용하는 변수 또는 함수들을 지정해놓고, 앞에 math를 붙이지 않고도 바로 사용할 수 있게 했다.

 

as 구문

모듈을 가져올 때 이름 충돌이 발생하는 경우가 있을 수도 있다.

추가로 모듈의 이름이 너무 길어서 짧게 줄이고 사용하고 싶은 경우가 있을 수 있다.

이럴때는 as 구문을 사용한다.

import 모듈 as 사용하고 싶은 식별자

위와 같은 형식으로 선언한다.

import math as m
print(m.sin(1))
print(m.cos(1))
print(m.tan(1))
print(m.floor(2.5))
print(m.ceil(2.5))

위 코드는 as 구문을 사용한 예시이다.

as 구문 이용하여 math 모듈을 m으로 사용하게끔 선언했다.

 

random 모듈

이제 모듈 사용법도 알았으니 간단한 모듈을 사용해보자.

random 모듈은 랜덤한 값을 생성할 때 사용하는 모듈이다.

# random 모듈
import random
print("# random 모듈")

# random(): 0.0 <= x < 1.0 사이의 float를 리턴합니다.
print("- random():", random.random())

#uniform(min,max): 지정한 범위 사이의 float를 리턴합니다.
print("- uniform(10,20):",random.uniform(10,20))

# randrange(): 지정한 범위의 int를 리턴합니다.
# - randrange(max): 0부터 max 사이의 값을 리턴합니다.
# - randrange(min, max): min 부터 max 사이의 값을 리턴합니다.
print("- randrange(10):", random.randrange(10))

# choice(list): 리스트 내부에 있는 요소를 랜덤하게 섞습니다.
print("- choice([1,2,3,4,5]):", random.choice([1,2,3,4,5]))

# shuffle(list): 리스트의 요소들을 랜덤하게 섞습니다.
print("- shuffle([1,2,3,4,5]):", random.shuffle([1,2,3,4,5]))

# sample(list, k<=숫자): 리스트의 요소 중에 k개를 뽑습니다.
print("- sample([1,2,3,4,5], k=2)", random.sample([1,2,3,4,5], k=2))

위 코드는 랜덤모듈의 기능들을 사용해본 코드이다.

함수 설명
random() 0.0 <=0.0 <= x < 1.0 사이의 float를 리턴합니다.
uniform(min,max) 지정한 범위 사이의 float를 리턴합니다.
randrange() randrange()지정한 범위의 int를 리턴합니다.
choice(list) 리스트 내부에 있는 요소를 랜덤하게 섞습니다.
shuffle(list) 리스트의 요소들을 랜덤하게 섞습니다.
sample(list, k<=숫자) 리스트의 요소 중에 k개를 뽑습니다.

이 또한 기능들의 일부이므로 추가로 공부하고 싶다면 위 링크를 살펴보자.

위 코드의 실행결과이다.

 

sys 모듈

sys 모듈은 시스템과 관련된 정보를 가지고 있는 모듈이다.

import sys

print(sys.argv)
print("---")

# 컴퓨터 환경과 관련된 정보를 출력합니다.
print("getwindowsversion():", sys.getwindowsversion())
print("---")
print("copyright:", sys.copyright)
print("---")
print("version:", sys.version)


# 프로그램을 강제로 종료합니다.
sys.exit()

위 코드는 시스템의 정보들을 볼 수있는 코드이다.

위 코드의 실행결과이다.

필자가 사용하는 구름 IDE 는 리눅스 기반이라, 윈도우 정보 모듈을 따로 식별할수가 없었다.

따라서 파이썬 프로그램을 따로 설치해 출력해보았다.

 

os 모듈

os 모듈은 운영체제와 관련된 기능을 가진 모듈이다.

새로운 폴더를 만들거나, 파일이 뭐가 있는지 확인하는 일도 os 모듈을 활용해서 처리한다.

import os

print("현재 운영체제:", os.name)
print("현재 폴더:", os.getcwd())
print("현재 폴더 내부의 요소:", os.listdir())

# 폴더를 만들고 제거합니다.[폴더가 비어있을 때만 제거 가능]
os.mkdir("hello")
os.rmdir("hello")

# 파일을 생성하고 + 파일 이름을 생성 합니다.
with open("original.txt", "w") as file:
    file.write("hello")
os.rename("original.txt", "new.txt")

# 파일을 제거합니다
os.remove("new.txt")
# os.unlink("new.txt")

# 시스템 명령어 실행
os.system("dir")

위 코드를 살펴보자.

함수 기능
name 현재 운영체제의 이름을 표시한다.
getcwd() 현재 폴더의 이름을 표시한다.
mkdir(str) 매개변수로 들어간 이름의 폴더를 생성한다.
rmdir(str) 매개변수로 들어간 이름의 폴더를 삭제한다.
rename(A,B) A에 해당하는 이름의 파일을 B 이름으로 교체한다.
remove(A) A 이름의 파일을 제거한다.

위 코드의 실행결과이다.

실제 출력되는 코드는 3개이므로 3개가 출력된다.

나머지 코드는 내부에서 실행되는 코드이므로 미출력 되었다.

 

 

datetime 모듈

datetime 모듈은 date(날짜), time(시간)과 관련된 모듈로, 날짜 형식을 만들 때 자주 사용되는 코드들로 구성되어 있다.

import datetime

# 현재 시각을 구하고 출력하기
print("# 현재 시각 출력하기")
now = datetime.datetime.now()
print(now.year, "년")
print(now.month, "월")
print(now.day, "일")
print(now.hour, "시")
print(now.minute, "분")
print(now.second, "초")
print()

# 시간 출력 방법
print("# 시간을 포맷에 맞춰 출력하기")
output_a = now.strftime("%Y.%m.%d %H:%M:%S")
output_b = "{}년 {}월 {}일 {}시 {}분 {}초".format(now.year, now.month, now.day, now.hour, now.minute, now.second)
output_c = now.strftime("%Y{} %m{} %d{} %H{} %M{} %S{}").format(*"년월일시분초") # 문자열, 리스트 등 앞에 *를 붙이면 오쇼 하나하나가 매개변수로 지정된다.
print(output_a)
print(output_b)
print(output_c)
print()

위 코드의 실행결과이다.

위 코드는 시간과 날짜에 관련된 코드이므로 위 실행결과 처럼 나오게 된다.

strftime() 함수를 사용하면 시간을 형식에 맞춰 출력할 수 있다. 하지만 한국어 등의 문자는 매개변수에 넣을 수 없다.

그래서 output_b 와 output_c 같은 형식을 사용한다.

# 시간 처리하기
import datetime
now = datetime.datetime.now()

# 특정 시간 이후의 시간 구하기
print("# datetime.timedelta 로 시간 더하기")
after = now + datetime.timedelta(weeks=1, days=1, hours=1, minutes=1, seconds=1)
print(after.strftime("%Y{} %m{} %d{} %H{} %M{} %S{}").format(*"년월일시분초"))
print()

# 특정 시간 요소 교체하기
print("# now.replace()로 1년 더하기")
output = now.replace(year=(now.year + 1))
print(output.strftime("%Y{} %m{} %d{} %H{} %M{} %S{}").format(*"년월일시분초"))

위 코드와 같이 다양한 곳에서 사용이 가능하다.

timedelta() 함수를 사용하면 특정한 시간의 이전 또는 이후를 구할 수 있다. 하지만 이 함수는 1년 이후, 2년 이후 등의 몇 년의 후를 구하는 기능이 없다.

그래서 1년후를 구하고 싶다면 replace() 함수를 사용해 아예 날짜 값을 교체하는 것이 일반적이다.

위 코드의 실행결과이다.

 

time 모듈

시간과 관련된 기능을 다룰 때는 time 모듈을 사용한다.

# time 모듈
import time

print("지금부터 5초 동안 정지합니다!")
time.sleep(5)
print("프로그램을 종료합니다.")

위 코드를 보면 sleep() 함수를 사용했다.

sleep() 함수는 특정 시간동안 코드 진행을 정지할 때 사용하는 함수이다.

매개변수에 정지하고 싶은 시간을 초 단위로 입력한다.

실행했을 때 위 문구가 뜨고 일정시간 진행하지 않았다가,

후에 프로그램을 종료합니다 라는 문구와 함께 프로그램이 종료된다.

sleep() 함수는 여러곳에서 자주 사용하는 함수이니 기억해두면 좋을 듯 싶다 :D

 

 

urllib 모듈

urllib 모듈은 'URL을 다루는 라이브러리' 라는 의미이다.

from urllib import request

target = request.urlopen("https://google.com")
output = target.read()

print(output)

urllib 모듈로 구글을 가져와 보았다.

그리고 read() 함수로 구글을 읽어보았다.

위 코드의 실행결과이다.

음...상당히 긴 코드가 나왔는데, 사실 저건 구글의 html 코드이다. 구글의 url을 따라 들어간 뒤 read로 html 형식으로 읽은 것이다.

주목.

코드의 실행결과 앞쪽에 b 라는 글자가 붙어있는데, 이는 바이너리 데이터를 의미하는 것이다.

바이너리 데이터는 추후에 공부하도록 하겠다.

 

정리
표준 모듈
은 파이썬이 기본적으로 제공하는 모듈이다.
import 구문은 모듈을 읽어 들일 때 사용하는 구문이다.
as 키워드는 모듈을 읽어 들이고 별칭을 붙일 때 사용하는 구문이다.
파이썬 문서는 모듈의 자세한 사용 방법이 들어있는 문서이다.
728x90

'Programming > Python' 카테고리의 다른 글

20. 모듈 만들기  (0) 2021.03.25
19. 외부 모듈(Beautiful Soup, Flask 모듈)  (0) 2021.03.24
17. 예외 고급  (0) 2021.03.22
16. 구문 오류와 예외  (0) 2021.03.21
15. 함수 고급(파일 처리, 제네레이터)  (0) 2021.03.20

댓글

IT_learning's Commit