점프 투 파이썬 DAY13(표준라이브러리)

정지범·2026년 9월 22일

점프 투 파이썬

목록 보기
24/37

05-6 표준 라이브러리

목차

  • 1. 표준 라이브러리란?

  • 2. datetime.date

  • 3. time

    • 3-1. time.time()
    • 3-2. time.localtime()
    • 3-3. time.asctime()
    • 3-4. time.ctime()
    • 3-5. time.strftime()
    • 3-6. time.sleep()
  • 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


1. 표준 라이브러리란?

표준 라이브러리(Standard Library) 는 파이썬을 설치하면 기본적으로 함께 설치되는 여러 모듈을 말한다.

따라서 별도의 설치 없이 다음과 같이 불러와 사용할 수 있다.

import random
import math
import os

내장 함수와 차이점은 다음과 같다.

내장 함수
→ import 없이 바로 사용
→ print(), len(), sum()

표준 라이브러리
→ 파이썬에 기본 포함
→ 대부분 import 후 사용
→ random, math, os 등

모든 라이브러리를 외울 필요는 없고, 어떤 기능이 어느 라이브러리에 있는지 알아 두는 것이 중요하다.


2. datetime.date

datetime 모듈은 날짜와 시간을 다룰 때 사용한다.

그중 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

3. time

time 모듈은 시간과 관련된 기능을 제공한다.

import time

3-1. time.time()

현재 시간을 숫자로 반환한다.

import time

print(time.time())

실행 결과는 다음과 같은 실수 형태이다.

1789991234.12345

이 값은 특정 기준 시점부터 현재까지 흐른 시간을 초 단위로 나타낸 값이다.

보통 현재 시각을 사람이 읽기 좋게 출력하기보다는

  • 프로그램 수행 시간 측정
  • 시간 계산

등에 활용한다.


3-2. time.localtime()

time.time()으로 얻은 값을 사람이 구분할 수 있는

연 / 월 / 일 / 시 / 분 / 초

형태로 변환한다.

import time

result = time.localtime(time.time())

print(result)

time.localtime()은 현재 시간을 기준으로 사용할 수도 있다.

time.localtime()

3-3. time.asctime()

localtime()의 결과를 사람이 읽기 쉬운 문자열로 바꾼다.

import time

print(time.asctime(time.localtime()))

예시

Mon Sep 21 23:10:30 2026

3-4. time.ctime()

현재 시각을 간단하게 문자열로 확인할 수 있다.

import time

print(time.ctime())

즉,

time.asctime(time.localtime())

처럼 길게 작성하지 않고

time.ctime()

으로 현재 시간을 표현할 수 있다.


3-5. 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요일
%pAM / PM

예를 들어

time.strftime("%Y년 %m월 %d일")

처럼 사용할 수 있다.


3-6. 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초 대기


4. 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 = 최대공약수


5. 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 = 최소공배수


6. random

random 모듈은 무작위 값을 만들 때 사용한다.

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))

처럼 사용할 수 있다.


7. 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로 채움

8. 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


9. 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()

를 사용할 수 있다.


10. 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()는 누적 계산이 복잡할 때 사용할 수 있다.


11. 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" 값을 기준으로 정렬한다.


12. shutil

shutil은 파일을 복사하거나 이동할 때 사용한다.


파일 복사

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() → 이동

13. glob

glob는 특정 패턴에 해당하는 파일 목록을 찾을 때 사용한다.

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

등을 찾을 수 있다.


14. pickle

pickle은 파이썬 객체를 파일에 저장하고 다시 불러올 때 사용한다.

예를 들어 딕셔너리를 저장해 보자.

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 파일은 불러오지 않는 것이 안전하다.


15. os

os 모듈은 운영체제와 관련된

  • 환경 변수
  • 파일
  • 디렉터리

등을 다룰 때 사용한다.

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()파일 또는 디렉터리 이름 변경

16. zipfile

zipfile은 ZIP 파일을 만들거나 압축을 해제할 때 사용한다.

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() → 전체 해제

17. 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()은 스레드 종료 대기라고 기억하면 된다.


18. tempfile

tempfile은 임시 파일을 만들 때 사용한다.

import tempfile

f = tempfile.TemporaryFile()

임시로 데이터를 저장하는 파일 객체를 생성한다.

작업이 끝난 뒤

f.close()

하면 임시 파일이 자동으로 정리된다.

임시 파일을 직접 관리할 필요가 없어 테스트나 임시 데이터 처리에 유용하다.


19. traceback

traceback은 오류가 발생했을 때 오류가 어디에서 발생했는지 추적하는 데 사용한다.

예를 들어

def a():
    return 1 / 0

def b():
    a()

에서 오류가 발생했다고 하자.

단순히

try:
    b()

except:
    print("오류 발생")

이라고 하면

오류 발생

만 출력된다.

어디에서 오류가 발생했는지는 알기 어렵다.


traceback 사용

import traceback

try:
    b()

except:
    print(traceback.format_exc())

그러면

main
 ↓
b()
 ↓
a()
 ↓
1 / 0
 ↓
ZeroDivisionError

처럼 오류가 발생한 과정을 확인할 수 있다.

복잡한 프로그램에서 오류 원인을 찾을 때 유용하다.


20. json

json은 JSON 데이터를 파이썬에서 처리할 때 사용하는 모듈이다.

JSON 예시

{
    "name": "홍길동",
    "age": 30
}

파이썬의 딕셔너리와 모양이 비슷하다.


JSON 파일 → 파이썬

import json

with open("data.json", encoding="utf-8") as f:
    data = json.load(f)

print(data)

json.load()를 사용하면 JSON 파일을 파이썬 객체로 가져올 수 있다.


파이썬 → 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
    )
)

21. urllib

urllib은 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 인증서 오류가 발생한다고 해서 인증서 검증을 무조건 끄는 것은 보안상 좋지 않다.


22. webbrowser

webbrowser는 파이썬 프로그램에서 웹 브라우저를 실행할 때 사용한다.

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운영체제, 파일, 디렉터리 제어
zipfileZIP 파일 생성 / 해제
threading스레드 작업
tempfile임시 파일
traceback오류 추적
jsonJSON 데이터 처리
urllibURL 요청
webbrowser웹 브라우저 실행

💡 특히 기억하면 좋은 것

처음부터 모든 라이브러리를 외울 필요는 없다.

우선 다음 정도를 기억해 두면 좋다.

날짜 / 시간
→ datetime, time

난수
→ random

최대공약수 / 최소공배수
→ math.gcd(), math.lcm()

순열 / 조합
→ itertools

파일 찾기
→ glob

파일 복사 / 이동
→ shutil

파일 / 폴더 제어
→ os

ZIP
→ zipfile

JSON
→ json

오류 추적
→ traceback

💡 헷갈리기 쉬운 부분

zip() vs zip_longest()

zip()
→ 짧은 쪽에서 종료

zip_longest()
→ 긴 쪽까지 유지
→ 부족한 값 채우기 가능

순열 vs 조합

permutations()
→ 순열
→ 순서 중요

combinations()
→ 조합
→ 순서 중요하지 않음

JSON 함수

load  → 파일을 읽는다
dump  → 파일에 저장한다

loads → 문자열을 읽는다
dumps → 문자열로 만든다

load / dump 뒤에 s가 붙으면 문자열(String) 과 관련 있다고 기억하면 쉽다.


스레드

Thread()
→ 스레드 생성

start()
→ 실행

join()
→ 종료될 때까지 기다림

💡 핵심 정리

표준 라이브러리는 파이썬을 설치하면 함께 제공되는 여러 유용한 모듈이다.

이번 장은 각각의 함수 사용법을 전부 외우는 것이 목적이라기보다

"파이썬에는 이런 기능을 하는 라이브러리가 이미 있구나"

를 알아 두는 것이 중요하다.

예를 들어 파일을 복사해야 한다면 직접 복사 기능을 처음부터 만드는 것이 아니라

import shutil

을 떠올리고,

JSON을 처리해야 한다면

import json

을 떠올리는 식이다.

즉,

필요한 기능 확인
   ↓
관련 표준 라이브러리 찾기
   ↓
import
   ↓
이미 만들어진 기능 사용

의 흐름으로 생각하면 된다.

profile
성실하자:)

0개의 댓글