표준 라이브러리(Standard Library) (1)
프로그래밍 언어의 기본 기능과 기능을 확장하는 데 사용할 수 있는 기본적인 모듈과 함수의 집합
Library : 원하는 정보(프로그램)를 찾아 사용하자
프로그래머가 기본적인 작업을 수행하기 위해 처음부터 모든 것을 작성하지 않고, 이미 구현된 함수와 모듈을 사용하여 빠르고 효율적으로 프로그램을 작성할 수 있도록 도와준다.
sys 모듈
파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈
sys.argv
- 명령행에서 인수 전달하기
# Terminal, cmd, prompt에서 python test.py abc pey guido --> 파일이름 뒤에 있는 값들이 sys.argv 리스트에 추가됨
sys.exit()
강제로 스크립트 종료하기
ctrl z 나 ctrl d 와 같은 기능
sys.path
자신이 만든 모듈 불러와 사용하기
sys.path는 파이썬 모듈들이 저장되어 있는 위치를 나타냄
이 위치에 있는 모듈은 경로에 상관없이 어디에서나 불러올 수 있음.
# path_append.py import sys sys.path.append("C:/doit/Mymod") --> 경로 이름을 추가해 해당 경로에 있는 모듈을 불러올 수 있음
pickle
객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 하는 모듈
객체를 바이너리 형태로 표현하고 저장하거나, 데이터를 파이썬 객체로 복원하는 protocols을 제공
pickle 모듈의 dump 함수를 사용하여 객체 data를 그대로 저장(serializing)
dump(obj, file_obj, ...) # Write the given Python object obj into file_obj
import pickle f = open("test.txt", 'wb') data = {1: 'python', 2: 'You need'} pickle.dump(data, f) f.close()
pickle.dump로 저장한 파일을 load함수를 사용해 객체 data로 복원(de-serializing)
load(file_obj, ...) # Read file_obj and return its Python object
import pickle f = open("test.txt", 'rb') data = picle.load(f) print(data) res : {1: 'python', 2: 'You need'}
import pickle with open('text.txt'. 'rb') as f: _, data = pickle.load(f) print(data)
OS
환경 변수나 디렉토리, 파일 등의 OS 자원을 제어할 수 있게 해주는 모듈
os.environ
- 내 시스템의 환경변수 값을 알고 싶을 때 사용
>>> import os >>> os.environ environ({딕셔너리 객체}) # ('PROGRAMFILES': 'C:\\Program Files', ....) 이런식으로 나옴
- 돌려받은 객체가 딕셔너리 객체이기 때문에, 호출해서 원하는 값을 얻을 수도 있음
os.environ['PATH'] # res : 'C:\\ProgramData\\Oracle\\Java\\javapath; ... 생략 ...'
os.getcwd
- 디렉토리 위치 돌려받기
os.getcwd() # res : 'C:\WINDOWS'
os.system
시스템 명령어 호출하기
시스텀 자체의 프로그램이나 기타 명령어를 파이썬에서 호출할 수 있음
# 현재 디렉토리에서 시스템 명령어 ls을 실행하는 예 >>> os.system("ls")
os.popen
- 실행한 시스템 명령어의 결괏값을 읽기 모드 형태의 파일 객체로 돌려줌
f = os.popen("ls") print(f.read())
기타 유용한 os 관련 함수
os.mkdir(디렉토리) : 디렉토리 생성
os.rmdir(디렉토리) : 디렉토리 삭제(비어있어야 가능)
os.unlink(파일 이름) : 파일을 지운다
os.rename(src, dst) : src라는 이름의 파일을 dst라는 이름으로 바꾼다.
shutil
- shutil.copy : 파일을 복사해주는 파이썬 모듈
# src.txt 파일을 dst.txt로 복사
import shutil
shutil.copy("src.txt", "dst.txt")
dst가 디렉토리 이름이면 src.txt 그대로 dst 디렉토리에 복사됨
동일한 이름이 있다면 덮어쓴다.
glob
Unix-style Pathname Pattern Expansion
특정 디렉토리에 있는 파일 이름을 모두 알아야 할 때 주로 사용하는 모듈
glob는 Unix shell 에서 사용되는 특정 패턴과 일치하는 파일과 디렉토리를 찾아줌
glob(pathname)
디렉토리에 있는 파일들을 리스트로 만들기
디렉토리 지정하지 않으면 working directory에서 실행
# C:/doit 디렉토리에 있는 파일 중 이름이 mark로 시작하는 파일들을 모두 찾아서 읽어들이는 예 import glob glob.glob("C:/doit/mark*") glob.glob('*.py')
tempfile
파일을 임시로 만들어서 사용할 때 유용한 모듈
tempfile.mkstemp()
- 중복되지 않는 임시 파일의 이름을 무작위로 만들어서 돌려줌
import tempfile filename = tempfile.mkstemp() filename # res : 'C:\WINDOWS\TEMP\~-275151-0'
tempfile.TemporaryFile()
임시 저장 공간으로 사용할 파일 객체를 돌려줌
기본적으로 wb모드를 가짐
f.close()가 호출되면 자동으로 사라짐
import tempfile f = tempfile.TemporaryFile() f.close() # 생성한 임시파일 자동으로 삭제
time
- 시간과 관련된 모듈
time.time()
- UTC를 사용하여 현재 시간을 실수 형태로 돌려주는 함수
- 1970/1/1 0시 00분 00초 epoch 시각부터 현재까지 흐른 시간을 second 로 리턴
import time time.time() # res : 1692774508.134141
time.localtime / time.gmtime
- time.time()이 돌려준 실수 값을 사용해서 연도, 월, 일, 시, 분, 초... 의 형태로 바꿔주는 함수
- time.gmtime은 UTC 시간 기준으로 return
time.localtime(time.time()) # time.struct_time(tm_year=2023, tm_mon=11, ...) time.gmtime(time.time()) # time.struct_time(tm_year=2023, tm_mon=11, ...)
time.asctime
- time.localtime에 의해서 반환된 튜플 형태의 값을 인수로 받아 날짜와 시간을 알아보기 쉬운 형태로 돌려주는 함수
time.asctime(time.localtime(time.time())) # res: 'Wed Aug 23 16:10:47 2023'
time.ctime
time.asctime(time.localtime(time.time()))를 time.ctime을 이용해서 간편하게 표시.
asctime과 다른점은 ctime은 항상 현재 시간만 돌려줌
time.ctime() # res : 'Wed Aug 23 16:10:47 2023'
time.process_time / time.thread_time
- 현재 프로세스 / 쓰레드 의 CPU 시간의 합을 return (sleep 시간 제외)
time.process_time() # 4.59375 time.thread_time() # 3.844024
time.strftime
시간에 관계된 것을 세밀하게 표현하는 여러가지 포맷 코드 제공
time.strftime('출력할 형식 포맷코드', time.localtime(time.time()))
import time time.strftime('%x', time.localtime(time.time())) # res : '08/23/23'
time.sleep
루프 안에서 주로 사용
일정한 시간 간격을 두고 루프를 실행할 수 있다.
주어진 시간동안 current thread의 실행을 중단시킬 수 있다.
# sleep1.py import time for i in range(10): print(i) time.sleep(1)
start = time.time() time.sleep(2) elapse = time.time() - start # 2.001231235...
calendar
파이썬에서 달력을 볼 수 있게 해주는 모듈
calendar.calendar(연도)
- 그해의 전체 달력을 볼 수 있음
calendar.prcal(연도)
- calendar.calendar(연도)와 같은 결괏값
calendar.prmonth(연도, 월)
- 해당 연도의 해당 월에 해당하는 달력을 보여줌
calendar.weekday(연도, 월, 일)
그 날짜에 해당하는 요일 정보를 돌려줌
월요일은 0, 화요일은 1, .......
calendar.monthrange(연도, 월)
- 입력받은 달의 1일이 무슨 요일인지, 그 달이 며칠까지 있는 지를 튜플 형태로 돌려줌
import calendar calendar.monthrange(2023, 8) # (calendar.TUESDAY, 31)
random
난수를 발생시키는 모듈
다양한 확률분포에 따른 pseudo-random generators 제공
random.random()
- 0.0에서 1.0 사이의 실수 중에서 난수 값을 돌려줌
random.randint(a, b)
- a에서 b 사이의 정수 중에서 난수 값을 돌려줌(a, b 포함)
random.uniform(a, b)
- a에서 b 사이의 실수 중에서 난수 값을 돌려줌(a, b 포함)
random.gauss(mu, sigma), random.normalvariate(mu, sigma)
- 평균이 mu, 표준편차가 sigma인 Gaussian distribution을 따르는 분포 하에 난수(실수) 돌려줌
random.seed(a=None, version=2)
random number genarator을 초기화
a=None # current system time이 사용되고 있음
random.choice(iterable)
- 입력받은 변수에서 무작위로 하나를 선택하여 돌려줌
random.shuffle(list)
- 입력받은 리스트의 항목을 무작위로 섞어줌.
example
# random_pop.py import random def random_pop(data): number = random.randint(0, len(data)- 1) return data.pop(number)
import random round2 = lambda x : int(x + 0.5) print([round2(random.uniform(0, 10)) for i in range(10)]) print([round2(random.gauss(5, 1)) for i in range(10)])
webbrowser
자신의 시스템에서 사용하는 기본 웹 브라우저를 자동으로 실행하는 모듈
webbrowser.open(url)
기본 웹브라우저를 자동으로 실행하고 해당 url로 가게 해줌
이미 웹브라우저가 실행된 상태라면 해당 url로 이동
실행되지 않은 상태라면 브라우저 실행 후 해당 url로 이동
webbrowser.open_new(url)
- 이미 웹 브라우저가 실행된 상태이더라도 새로운 창으로 해당 주소가 열림
threading
컴퓨터에서 동작하고 있는 프로그램을 Process라고 함
보통은 1개 프로세스는 한가지 일만 하지만, 스레드를 사용하여 하나의 프로세스 안에서 2가지 이상의 일을 동시에 수행할 수 있음
# origin.py
import time
def long_task():
for i in range(5):
time.sleep(1)
print(f'working: {i}\n')
print("Start")
for i in range(5):
long_task()
print("End")
위 코드는 5초씩 5번 반복해 25초가 소요된다
스레드를 사용하여 5초에 다 끝내보자
# thread_test.py
import time
import threading
def long_task():
for i in range(5):
time.sleep(1)
print(f'working: {i}\n')
print("Start")
threads = []
for i in range(5):
t = threading.Thread(target = long_task) # Thread 생성
threads.append(t)
for t in threads:
t.start()
print("End")
math
- C의 math.h나 cmath 와 유사하게 유용한 수학 함수, 상수들을 제공
Constant
pi : 원주율 3.1415....
e : 자연상수 2.718....
nan
sqrt(x)
- x의 square root 값 return
log(x[, base]), log2(x), log10(x)
- x의 natural 로그, base-2 로그, base-10 로그 값을 리턴
ceil(x)
- x와 같거나 그 이상인 가장 작은 수를 return
prod(iterable, *, start = 1)
- input iterable의 모든 요소들의 곱을 계산
sin(x), cos(x), tan(x).... atan(x), atan2(x,y)
- 삼각함수
degrees(x), radians(x)
- x 각도를 라디안으로 변환하거나, 그 반대
isinf(x), isnan(x), isfinite(x)
- x가 infinity인지, NaN인지, finite 인지 혹은 아닌지 확인
import math
factorial_prod = lambda n : math.prod(range(1, n + 1))
print(factorial_prod(10)) # 3628800
decimal
빠르고 정확하게 rounded 소수점 산술을 제공
Decimal : floating point value를 담고 있는 클래스
Decimal.quantize(exp, rounding=None, context=None)
- exp 정확도를 가진 rounded value를 리턴
example
# without decimal library print(round(3.5)) # 4 print(round(4.5)) # 4 (not 5)
- why? : systemic bias를 피하기 위해
import decimal print(decimal.getcontext()) # rounding=decimal.ROUND_HALF_EVEN print(decimal.Decimal(3.5).quantize(1, deciaml.ROUND_HALF_UP)) # 4 print(decimal.Decimal(4.5).quantize(1, deciaml.ROUND_HALF_UP)) # 5
# handmade function round2 = lambda x : int (x + 0.5) print(round2(3.5)) # 4 print(round2(4.5)) # 5
참조) Do it! 점프 투 파이썬 (박응용 지음)
'Programming Language > Python' 카테고리의 다른 글
[Python] 23. 정규 표현식(regular expression) (0) | 2023.11.07 |
---|---|
[Python] 22. 표준 라이브러리(Standard Library)(2) (0) | 2023.11.07 |
[Python] 20. 내장 함수(Built-in-function) (0) | 2023.11.07 |
[Python] 19. 예외처리(Exception Handling) (0) | 2023.11.07 |
[Python] 18. 패키지(package) (0) | 2023.11.07 |