목차
1. 표준 라이브러리란?
2. datetime.date
3. time
4. math.gcd()
5. math.lcm()
6. random
7. itertools.zip_longest()
8. itertools.permutations()
9. itertools.combinations()
10. functools.reduce()
11. operator.itemgetter()
12. shutil
13. glob
14. pickle
15. os
16. zipfile
17. threading
18. tempfile
19. traceback
20. json
21. urllib
22. webbrowser
표준 라이브러리(Standard Library) 는 파이썬을 설치하면 기본적으로 함께 설치되는 여러 모듈을 말한다.
따라서 별도의 설치 없이 다음과 같이 불러와 사용할 수 있다.
import random
import math
import os
내장 함수와 차이점은 다음과 같다.
내장 함수
→ import 없이 바로 사용
→ print(), len(), sum()
표준 라이브러리
→ 파이썬에 기본 포함
→ 대부분 import 후 사용
→ random, math, os 등
모든 라이브러리를 외울 필요는 없고, 어떤 기능이 어느 라이브러리에 있는지 알아 두는 것이 중요하다.
datetime.datedatetime 모듈은 날짜와 시간을 다룰 때 사용한다.
그중 datetime.date()는 연, 월, 일을 이용해 날짜 객체를 만든다.
import datetime
day1 = datetime.date(2026, 9, 1)
day2 = datetime.date(2026, 9, 21)
두 날짜를 빼면 날짜 차이를 구할 수 있다.
diff = day2 - day1
print(diff.days)
실행 결과
20
즉,
날짜 객체 - 날짜 객체
↓
날짜 차이
를 구할 수 있다.
import datetime
day = datetime.date(2026, 9, 21)
print(day.weekday())
weekday()는
월요일 → 0
화요일 → 1
수요일 → 2
목요일 → 3
금요일 → 4
토요일 → 5
일요일 → 6
의 형태로 반환한다.
isoweekday()도 사용할 수 있다.
print(day.isoweekday())
isoweekday()는
월요일 → 1
...
일요일 → 7
로 반환한다.
weekday() → 월요일이 0
isoweekday() → 월요일이 1
timetime 모듈은 시간과 관련된 기능을 제공한다.
import time
time.time()현재 시간을 숫자로 반환한다.
import time
print(time.time())
실행 결과는 다음과 같은 실수 형태이다.
1789991234.12345
이 값은 특정 기준 시점부터 현재까지 흐른 시간을 초 단위로 나타낸 값이다.
보통 현재 시각을 사람이 읽기 좋게 출력하기보다는
등에 활용한다.
time.localtime()time.time()으로 얻은 값을 사람이 구분할 수 있는
연 / 월 / 일 / 시 / 분 / 초
형태로 변환한다.
import time
result = time.localtime(time.time())
print(result)
time.localtime()은 현재 시간을 기준으로 사용할 수도 있다.
time.localtime()
time.asctime()localtime()의 결과를 사람이 읽기 쉬운 문자열로 바꾼다.
import time
print(time.asctime(time.localtime()))
예시
Mon Sep 21 23:10:30 2026
time.ctime()현재 시각을 간단하게 문자열로 확인할 수 있다.
import time
print(time.ctime())
즉,
time.asctime(time.localtime())
처럼 길게 작성하지 않고
time.ctime()
으로 현재 시간을 표현할 수 있다.
time.strftime()날짜와 시간을 원하는 형태로 출력할 때 사용한다.
import time
print(time.strftime("%Y-%m-%d"))
예시
2026-09-21
시간까지 출력하려면
print(time.strftime("%Y-%m-%d %H:%M:%S"))
예시
2026-09-21 23:15:30
| 코드 | 의미 |
|---|---|
%Y | 연도 |
%m | 월 |
%d | 일 |
%H | 시간(24시간) |
%M | 분 |
%S | 초 |
%A | 요일 |
%p | AM / PM |
예를 들어
time.strftime("%Y년 %m월 %d일")
처럼 사용할 수 있다.
time.sleep()프로그램을 일정 시간 동안 멈춘다.
import time
print("시작")
time.sleep(2)
print("종료")
실행하면
시작
(2초 대기)
종료
가 된다.
반복문에서도 자주 사용한다.
import time
for i in range(5):
print(i)
time.sleep(1)
0
(1초)
1
(1초)
2
...
소수도 사용할 수 있다.
time.sleep(0.5)
→ 0.5초 대기
math.gcd()gcd는 최대공약수를 구한다.
import math
print(math.gcd(60, 100))
실행 결과
20
즉,
60과 100을 모두 나눌 수 있는 가장 큰 수
→ 20
이다.
여러 값을 함께 사용할 수도 있다.
print(math.gcd(60, 100, 80))
실행 결과
20
gcd= Greatest Common Divisor = 최대공약수
math.lcm()lcm은 최소공배수를 구한다.
import math
print(math.lcm(15, 25))
실행 결과
75
즉,
15의 배수
15, 30, 45, 60, 75 ...
25의 배수
25, 50, 75 ...
처음으로 같은 값
→ 75
이다.
lcm= Least Common Multiple = 최소공배수
randomrandom 모듈은 무작위 값을 만들 때 사용한다.
import random
random.random()0 이상 1 미만의 실수를 무작위로 반환한다.
print(random.random())
예시
0.583921...
실행할 때마다 값이 달라질 수 있다.
random.randint()지정한 범위의 정수를 무작위로 반환한다.
print(random.randint(1, 10))
가능한 값
1 ~ 10
randint()는 양쪽 끝값을 모두 포함한다.
random.choice()여러 값 중 하나를 무작위로 선택한다.
import random
data = ["Python", "Java", "C"]
print(random.choice(data))
예시
Java
random.sample()데이터에서 원하는 개수만큼 무작위로 추출한다.
import random
data = [1, 2, 3, 4, 5]
print(random.sample(data, 3))
예시
[4, 1, 5]
리스트 전체를 무작위 순서로 가져오려면
random.sample(data, len(data))
처럼 사용할 수 있다.
itertools.zip_longest()기본 zip()은 두 데이터의 길이가 다르면 짧은 쪽에 맞춰 종료된다.
students = ["A", "B", "C", "D"]
snacks = ["사탕", "초콜릿"]
print(list(zip(students, snacks)))
실행 결과
[('A', '사탕'), ('B', '초콜릿')]
C, D는 사라진다.
이를 방지할 때 zip_longest()를 사용할 수 있다.
import itertools
students = ["A", "B", "C", "D"]
snacks = ["사탕", "초콜릿"]
result = itertools.zip_longest(
students,
snacks,
fillvalue="없음"
)
print(list(result))
실행 결과
[
('A', '사탕'),
('B', '초콜릿'),
('C', '없음'),
('D', '없음')
]
zip()
→ 짧은 데이터 기준
zip_longest()
→ 긴 데이터 기준
→ 부족한 값은 fillvalue로 채움
itertools.permutations()permutations()는 순열을 구한다.
순열은 순서가 중요하다.
import itertools
data = [1, 2, 3]
result = itertools.permutations(data, 2)
print(list(result))
실행 결과
[
(1, 2),
(1, 3),
(2, 1),
(2, 3),
(3, 1),
(3, 2)
]
여기서는
(1, 2)
(2, 1)
을 서로 다른 경우로 본다.
순열 = 순서 O
itertools.combinations()combinations()는 조합을 구한다.
조합은 순서를 구분하지 않는다.
import itertools
data = [1, 2, 3]
result = itertools.combinations(data, 2)
print(list(result))
실행 결과
[
(1, 2),
(1, 3),
(2, 3)
]
(2, 1)은 별도로 나오지 않는다.
| 함수 | 순서 |
|---|---|
permutations() | 중요함 |
combinations() | 중요하지 않음 |
순열 → 순서 O
조합 → 순서 X
중복을 허용하는 조합은
itertools.combinations_with_replacement()
를 사용할 수 있다.
functools.reduce()reduce()는 여러 데이터를 순서대로 계산해 하나의 값으로 줄인다.
import functools
data = [1, 2, 3, 4, 5]
result = functools.reduce(
lambda x, y: x + y,
data
)
print(result)
실행 결과
15
계산 과정을 보면
1 + 2
↓
3 + 3
↓
6 + 4
↓
10 + 5
↓
15
즉,
((((1 + 2) + 3) + 4) + 5)
형태이다.
단순한 합계를 구할 때는
sum(data)
가 훨씬 간단하다.
reduce()는 누적 계산이 복잡할 때 사용할 수 있다.
operator.itemgetter()itemgetter()는 리스트 안의 튜플이나 딕셔너리를 특정 값을 기준으로 정렬할 때 유용하다.
from operator import itemgetter
students = [
("철수", 22, "A"),
("영희", 32, "B"),
("민수", 17, "B")
]
result = sorted(students, key=itemgetter(1))
print(result)
두 번째 값인 나이를 기준으로 정렬한다.
민수 17
철수 22
영희 32
인덱스는 0부터 시작하므로
itemgetter(0) → 이름
itemgetter(1) → 나이
itemgetter(2) → 성적
이다.
from operator import itemgetter
students = [
{"name": "철수", "age": 22},
{"name": "영희", "age": 32},
{"name": "민수", "age": 17}
]
result = sorted(
students,
key=itemgetter("age")
)
print(result)
이 경우 "age" 값을 기준으로 정렬한다.
shutilshutil은 파일을 복사하거나 이동할 때 사용한다.
import shutil
shutil.copy(
"a.txt",
"backup/a.txt"
)
a.txt
↓ 복사
backup/a.txt
import shutil
shutil.move(
"a.txt",
"backup/a.txt"
)
a.txt
↓ 이동
backup/a.txt
copy() → 복사
move() → 이동
globglob는 특정 패턴에 해당하는 파일 목록을 찾을 때 사용한다.
import glob
print(glob.glob("*.py"))
현재 디렉터리에
test.py
main.py
hello.txt
가 있다면
['test.py', 'main.py']
처럼 .py 파일만 찾을 수 있다.
* → 길이에 상관없이 여러 문자
? → 문자 1개
예를 들어
glob.glob("test*")
라면
test.py
test1.txt
test_backup.py
등을 찾을 수 있다.
picklepickle은 파이썬 객체를 파일에 저장하고 다시 불러올 때 사용한다.
예를 들어 딕셔너리를 저장해 보자.
import pickle
data = {
"name": "python",
"age": 30
}
with open("data.pickle", "wb") as f:
pickle.dump(data, f)
dump()는 객체를 파일에 저장한다.
import pickle
with open("data.pickle", "rb") as f:
data = pickle.load(f)
print(data)
실행 결과
{'name': 'python', 'age': 30}
pickle.dump() → 저장
pickle.load() → 불러오기
보통 바이너리 모드로 사용한다.
wb → 바이너리 쓰기
rb → 바이너리 읽기
신뢰할 수 없는 출처의 pickle 파일은 불러오지 않는 것이 안전하다.
osos 모듈은 운영체제와 관련된
등을 다룰 때 사용한다.
import os
print(os.environ)
특정 환경 변수도 확인할 수 있다.
print(os.environ["PATH"])
print(os.getcwd())
getcwd()= Get Current Working Directory
os.chdir("C:/Users")
chdir()= Change Directory
os.mkdir("test")
os.rmdir("test")
단, 비어 있는 디렉터리만 삭제할 수 있다.
os.remove("test.txt")
os.rename(
"old.txt",
"new.txt"
)
| 함수 | 기능 |
|---|---|
os.environ | 환경 변수 확인 |
os.getcwd() | 현재 경로 확인 |
os.chdir() | 현재 경로 변경 |
os.mkdir() | 디렉터리 생성 |
os.rmdir() | 디렉터리 삭제 |
os.remove() | 파일 삭제 |
os.rename() | 파일 또는 디렉터리 이름 변경 |
zipfilezipfile은 ZIP 파일을 만들거나 압축을 해제할 때 사용한다.
import zipfile
with zipfile.ZipFile("files.zip", "w") as myzip:
myzip.write("a.txt")
myzip.write("b.txt")
a.txt
b.txt
↓
files.zip
import zipfile
with zipfile.ZipFile("files.zip") as myzip:
myzip.extractall()
모든 파일이 풀린다.
with zipfile.ZipFile("files.zip") as myzip:
myzip.extract("a.txt")
write() → ZIP에 파일 추가
extract() → 특정 파일 해제
extractall() → 전체 해제
threading스레드(Thread) 를 이용하면 하나의 프로그램 안에서 여러 작업을 동시에 진행할 수 있다.
기본적인 작업은 다음과 같다.
import threading
def work():
print("작업 중")
t = threading.Thread(target=work)
t.start()
Thread()로 스레드를 생성하고
t.start()
를 실행하면 작업이 시작된다.
import threading
def work():
print("작업 실행")
threads = []
for i in range(5):
t = threading.Thread(target=work)
threads.append(t)
for t in threads:
t.start()
여러 작업을 동시에 시작할 수 있다.
join()모든 스레드의 작업이 끝날 때까지 기다리고 싶다면 join()을 사용한다.
for t in threads:
t.join()
print("모든 작업 종료")
동작 구조
스레드 시작
↓
여러 작업 수행
↓
join()
↓
모든 스레드 종료까지 대기
↓
다음 코드 실행
start()는 스레드 실행,join()은 스레드 종료 대기라고 기억하면 된다.
tempfiletempfile은 임시 파일을 만들 때 사용한다.
import tempfile
f = tempfile.TemporaryFile()
임시로 데이터를 저장하는 파일 객체를 생성한다.
작업이 끝난 뒤
f.close()
하면 임시 파일이 자동으로 정리된다.
임시 파일을 직접 관리할 필요가 없어 테스트나 임시 데이터 처리에 유용하다.
tracebacktraceback은 오류가 발생했을 때 오류가 어디에서 발생했는지 추적하는 데 사용한다.
예를 들어
def a():
return 1 / 0
def b():
a()
에서 오류가 발생했다고 하자.
단순히
try:
b()
except:
print("오류 발생")
이라고 하면
오류 발생
만 출력된다.
어디에서 오류가 발생했는지는 알기 어렵다.
import traceback
try:
b()
except:
print(traceback.format_exc())
그러면
main
↓
b()
↓
a()
↓
1 / 0
↓
ZeroDivisionError
처럼 오류가 발생한 과정을 확인할 수 있다.
복잡한 프로그램에서 오류 원인을 찾을 때 유용하다.
jsonjson은 JSON 데이터를 파이썬에서 처리할 때 사용하는 모듈이다.
JSON 예시
{
"name": "홍길동",
"age": 30
}
파이썬의 딕셔너리와 모양이 비슷하다.
import json
with open("data.json", encoding="utf-8") as f:
data = json.load(f)
print(data)
json.load()를 사용하면 JSON 파일을 파이썬 객체로 가져올 수 있다.
import json
data = {
"name": "홍길동",
"age": 30
}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(
data,
f,
ensure_ascii=False
)
파이썬 객체 → JSON 문자열
json_data = json.dumps(data)
JSON 문자열 → 파이썬 객체
data = json.loads(json_data)
| 함수 | 기능 |
|---|---|
json.load() | JSON 파일 → 파이썬 |
json.dump() | 파이썬 → JSON 파일 |
json.loads() | JSON 문자열 → 파이썬 |
json.dumps() | 파이썬 → JSON 문자열 |
json.dumps(
data,
ensure_ascii=False
)
ensure_ascii=False를 사용하면 한글을 읽기 쉬운 형태로 표현할 수 있다.
보기 좋게 들여쓰기도 가능하다.
print(
json.dumps(
data,
indent=2,
ensure_ascii=False
)
)
urlliburllib은 URL을 통해 웹의 데이터를 가져오는 데 사용할 수 있다.
import urllib.request
예를 들어 웹 페이지를 요청한다.
import urllib.request
url = "https://example.com"
with urllib.request.urlopen(url) as response:
data = response.read()
print(data)
구조는
URL
↓
urlopen()
↓
서버에 요청
↓
응답
↓
read()
이다.
HTML을 파일로 저장할 수도 있다.
import urllib.request
url = "https://example.com"
with urllib.request.urlopen(url) as response:
with open("page.html", "wb") as f:
f.write(response.read())
HTTPS 인증서 오류가 발생한다고 해서 인증서 검증을 무조건 끄는 것은 보안상 좋지 않다.
webbrowserwebbrowser는 파이썬 프로그램에서 웹 브라우저를 실행할 때 사용한다.
import webbrowser
webbrowser.open(
"https://www.python.org"
)
기본 브라우저에서 해당 페이지를 연다.
새 창으로 열려면
webbrowser.open_new(
"https://www.python.org"
)
을 사용할 수 있다.
open() → 브라우저에서 페이지 열기
open_new() → 새 창으로 열기
| 라이브러리 | 주요 기능 |
|---|---|
datetime | 날짜 처리 |
time | 시간 처리, 대기 |
math | 수학 계산 |
random | 난수 생성 |
itertools | 반복 데이터 조합 |
functools | 함수형 프로그래밍 기능 |
operator | 정렬 기준 등 함수 제공 |
shutil | 파일 복사 / 이동 |
glob | 파일 검색 |
pickle | 파이썬 객체 저장 / 불러오기 |
os | 운영체제, 파일, 디렉터리 제어 |
zipfile | ZIP 파일 생성 / 해제 |
threading | 스레드 작업 |
tempfile | 임시 파일 |
traceback | 오류 추적 |
json | JSON 데이터 처리 |
urllib | URL 요청 |
webbrowser | 웹 브라우저 실행 |
처음부터 모든 라이브러리를 외울 필요는 없다.
우선 다음 정도를 기억해 두면 좋다.
날짜 / 시간
→ datetime, time
난수
→ random
최대공약수 / 최소공배수
→ math.gcd(), math.lcm()
순열 / 조합
→ itertools
파일 찾기
→ glob
파일 복사 / 이동
→ shutil
파일 / 폴더 제어
→ os
ZIP
→ zipfile
JSON
→ json
오류 추적
→ traceback
zip() vs zip_longest()zip()
→ 짧은 쪽에서 종료
zip_longest()
→ 긴 쪽까지 유지
→ 부족한 값 채우기 가능
permutations()
→ 순열
→ 순서 중요
combinations()
→ 조합
→ 순서 중요하지 않음
load → 파일을 읽는다
dump → 파일에 저장한다
loads → 문자열을 읽는다
dumps → 문자열로 만든다
load / dump 뒤에 s가 붙으면 문자열(String) 과 관련 있다고 기억하면 쉽다.
Thread()
→ 스레드 생성
start()
→ 실행
join()
→ 종료될 때까지 기다림
표준 라이브러리는 파이썬을 설치하면 함께 제공되는 여러 유용한 모듈이다.
이번 장은 각각의 함수 사용법을 전부 외우는 것이 목적이라기보다
"파이썬에는 이런 기능을 하는 라이브러리가 이미 있구나"
를 알아 두는 것이 중요하다.
예를 들어 파일을 복사해야 한다면 직접 복사 기능을 처음부터 만드는 것이 아니라
import shutil
을 떠올리고,
JSON을 처리해야 한다면
import json
을 떠올리는 식이다.
즉,
필요한 기능 확인
↓
관련 표준 라이브러리 찾기
↓
import
↓
이미 만들어진 기능 사용
의 흐름으로 생각하면 된다.