2025년 11월 6일 목요일
오후 9:46
모듈 - 여러 함수, 변수, 클래스등 하나의 파일로 묶어 놓은 것
하나의 파일, 한마디로 하나의 .py가 모듈이다.
기능 마다 모듈을 분리 -> 유지보수와 재사용에 용이
두가지 종류
내장 모듈 - 파이썬이 기본적으로 제공하는 모듈
사용자 정의 모듈 - 사용자가 직접 만든 .py 파일
모듈 불러오기
Import 키워드 사용
Import random - random이란 모듈 불러오기
모듈을 불러온 뒤, 모듈에 있는 기능(함수, 변수, 클래스) 사용하기
Import random
random.randrange(0,2)
random 이라는 모듈을 불러오고 해당 모듈에 있는 randrange() 함수 호출
내장 모듈
수학/통계 - math, statistics, random
날짜/시간 - datetime, time
파일/시스템 -os, sys, pathlib
데이터 처리 - json, csv, re
네트워크 관련 - socket, http, urllib
Math 모듈
import math
print(math.pi) # 원주율
print(math.e) # 자연상수
print(math.sqrt(16)) # 제곱근
print(math.pow(2,3)) # 거듭제곱
print(math.ceil(3.1)) # 올림
print(math.floor(3.9)) # 내림
3.141592653589793
2.718281828459045
4.0
8.0
4
3
print(dir(math))
['doc', 'loader', 'name', 'package', 'spec', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
함수이름 검색
Random모듈
난수(무작위 수)를 생성해주는 기능을 제공
import random
print(random.random())
print(random.randint(1, 10)) # 0~1 사이 난수
print(random.choice(['가위', '바위', '보'])) # 리스트에서 무작위 선택
print(random.sample(range(1, 46), 6)) # 목록에서 k개 샘플 뽑기
*실행 결과는 매번 달라진다
0.28390583073589837
10
가위
[43, 38, 22, 41, 25, 10]
datetime모듈
날짜와 시간을 다룰 때 가장 기본적인 모듈
import datetime
now = datetime.datetime.now() # 현재 날짜와 시간
print("현재 시각:", now)
today = datetime.datetime.today() # 오늘 날짜
print("현재 시각:", today)
future = today + datetime.timedelta(days=7) # 시간 차(간격) 계산
print("일주일 뒤:", future)
현재 시각: 2025-11-06 09:49:42.765618
현재 시각: 2025-11-06 09:49:42.765618
일주일 뒤: 2025-11-13 09:49:42.765618
사용자 정의 모듈
사용자가 원하는 내용이 담긴 모듈 별도로 정의할 수 있다
def plus(a, b):
return a + b
var1 = 100
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
import cal
print(cal.plus(3,4))
print(cal.var1)
p = cal.Person("Gildong", 30)
print(p.name, p.age)
7
100
Gildong 30
메서드 연산 결과, 변수, 클래스 객체 생성까지 가능하다.
모듈을 불러오는 또 다른 방법
• 일반적인 import 구문
import 모듈이름
• 모듈에서 특정 함수/변수/클래스만 불러오기
from 모듈이름 import 함수/변수/클래스
• 모듈의 모든 함수/변수/클래스 불러오기
from 모듈이름 import - 해당모듈의 모든것을 가져오겠다는 뜻
• 별칭(as) 붙이기 import 모듈이름 as 별칭
import 모듈이름 as 별칭
import 방식
모듈이름.함수/변수/클래스
from-import 방식
모듈이름 없이 함수/변수/클래스 이름으로 호출
임포트만 쓰면 모듈이름 앞에 붙이기
From 임포트 쓰면 모듈이름 앞에 안붙여도 됨 이차이가 중요
프롬방식은 딱 임포트한 함수만 불러올수 있는게 단점
from math import factorial, sqrt
팩토리얼, sqrt이두개만 가능
패키지
여러 개의 모듈을 하나의 디렉토리(폴더)로 묶어 관리하는 단위(폴더라 보면됨)
기능별 구조화를 통해 유지보수와 재사용성 증가
패키지 속 모듈 사용하기
User(패키지) -> cal.py(모듈) -> 함수 plus()
패캐지.모듈 형태로 임포트
패키지속 모든 파일 불러올려면 user.*이렇게 하는걸로 기억함
라이브러리란?
여러패키지의 모음
특정분야 지원하는 도구
다른 개발자들이 만들어 놓은 도구로써, 특정 작업을 수행할 때 사용하는, 재사용 가능한 코드의 집합
어찌보면 패키지, 라이브러리 둘다 비슷하다
다만 패키지는 구조관점 용어
라이브러리 기능과 목적 관점
판다스 패키지, 라이브러리 둘다 불러도 됨
그래도 라이브러리는 좀더 상위개념이라 함
라이브러리, 패키지, 모듈, 함수?
라이브러리 - 도서관
패키지 - 책장
모듈 - 책
함수변수클래스 - 한 챕터의 내용
판다스 - 데이터분석
Matplotlib - 데이터 시각화
Scikit learn -머신러닝
텐서플로 - 딥러닝
셀레니움 - 크롤링, 테스트
장고 - 웹
Pip명령어를 통해 외부 라이브러리 관리
Pip install 라이브버리 == 버전
형태로 명령어 입력 하면 설치
파일(File)
바이트의 묶음 저장된 의미가 있는 데이터 한 덩어리
텍스트문서, 실행파일등등
파일의 종류
이진 파일 0과1 인코딩된 파일 형태
파일 관련 라이브러리를 통해 파일 읽고/쓰기/이동/삭제 등등 조작에 유용함
1. 여러 파일의 이름을 한번에 변경
2. 파일을 자동으로 분류해서 폴더에 정리
3. 파일에서 필요한 부분만 추출
4. 파일 이동이나 정리, 오래되거나 큰 파일 찾기
5. 폴더 통째로 압축파일로 백업하기
6. 중복 파일 찾기
7. 파일 병합
파일 열기
f = open(파일 경로 문자열)
f.close()
• 파일을 열 때, 여러가지 모드로 열 수 있다. (Default는 읽기 모드)
• 읽기 전용인데 파일이 존재하지 않으면 FileNotFoundError 발생
• 읽기 모드에서는 오직 파일 읽기 가능
• 쓰기 모드에서는 오직 파일 쓰기 가능
• 파일 관련 작업이 모두 끝난 후, 객체의 close() 메서드를 통해 파 일을 닫아줘야 한다.
파일 열기(open) 옵션
R - 읽기 전용
W - 쓰기 전용(기존 내용에 덮어쓰기, 파일 모든 내용 삭제라 보면됨)
X - 쓰기전용(파일존재시 오류, 기존 내용 유지되고 이어 쓰기)
A - " 파일존재시 이어씀
T - 텍스트 모드
B - 바이너리 모드
파일 닫기(close)
파일을 열었으면 닫기 명령어 반드시 입력
파일 객체의 close() 메서드로 호출 사용이 끝난 파일은 안전하게 닫아야 함 파일을 열어둔 상태에서는 파일이 닫히기 전까지 잠김 → 파일 삭제/이동 불가
닫지 않으면, 시스템 자원 고갈과 변경 사항이 제대로 반영되지 않는 문제 발생할 수 있다
파일 읽기
전체 또는 일부
인자로 숫자를 지정하면, 해당 수 만큼 문자를 읽음
f.read(3)->해당 글자수 만큼 읽어 오겠다.
Text.txt
새싹 workspace 바로 안에 들어가게끔 해야 잘 출력됨
f = open("text.txt")
print(f.read())
f.close()
Hello
Python
같은선상에 텍스트 파일 놓고 싶다면 폴더명/text.txt 이렇게 해야 함
파일 읽기: readline() 메서드
현재 위치에서 한줄을 읽어온다.
줄바꿈 문자\n도 같이 붙게 된다.
한줄 읽고, 띄고, 한줄 읽고, 띄고 이렇게 된다.
f = open("C:/Users/USER/sesac_workspace/test/text.txt", encoding='utf-8')
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
Hello
Python
dwdwjdwjjdw
파일 읽기: readlines() 메서드
현재 위치에서 모든 줄 읽어온다. 리스트로 반환하는 메서드.
각 줄마다 줄 바꿈 문자 \n포함.
f = open("C:/Users/USER/sesac_workspace/test/text.txt", encoding='utf-8')
print(f.readline())
print(f.readline())
print(f.readlines())
f.close()
Hello
Python
['dwdwjdwjjdw\n', '123123']
그 위치에서부터 읽기 때문에 Python 다음줄부터 리스트 형태로 출력
파일 쓰기(write): write() 메서드
파일에 새로운 내용을 쓰는 것
줄 바꿈이 필요하면 줄 바꿈 문자(\n)를 사용
쓰기 모드 'w' 로 열어야 가능
f = open("test/newfile.txt", "w", encoding='utf-8')
f.close()
새 파일이 생성되는 모습
f = open("test/newfile.txt", "w", encoding='utf-8')
f.write("Hello\n")
f.write("World\n")
f.write("Python!")
# f.write('''
# Hello
# World
# Python
# ''')
f.close()
문자열 그대로 저장되었다.
Hello
World
Python!
f = open("test/newfile.txt", "w", encoding='utf-8')
f.write("Hello\n")
f.write("World\n")
f.write("Python!")
f.write('''
Hello
World
Python
''')
f.close()
Hello
World
Python!
Hello
World
Python
삼중따옴표는 구조 그대로 들어감
따로 \n안넣어도 됨
f = open("test/newfile.txt", "w", encoding='utf-8')
f.write("Hello\n")
f.write("World\n")
f.write("Python!")
f.write('''
Hello
World
Python
''')
f.close()
Hello
World
Python!
Hello
World
Python
이렇게 저장 됨
쓰여진 내용 확인
f = open('test/newfile.txt')
print(f.read())
f.close()
Hello
World
Python!
Hello
World
Python
파일 쓰기(write): writelines() 메서드
현재 위치에서 문자열 리스트를 파일에 쓰는 메서드
줄바꿈이 필요한 문자열 마지막에 \n을 넣는다.
f = open("test/newfile.txt", "w", encoding='utf-8')
f.writelines(["Monthy\n", "Python\n","a\n", "b"])
f.close()
Monthy
Python
a
b
f = open("test/newfile.txt", "w", encoding='utf-8')
f.write("Hello\n")
f.write("World\n")
f.write("Python!\n")
f.writelines(["Monthy\n", "Python\n","a\n", "b"])
f.close()
Hello
World
Python!
Monthy
Python
a
b
파일의 현재 위치 가져오기: tell()메서드
글자단위가 아닌 바이트 단위로 계산해서 반환
영어는 1바이트기에
3칸을 읽으면
3이 출력됨
만약 공백, 한글이 중간에 있을시
공백은 1바이트 한글은 3바이트
영어2글자 공백1칸 한글 1글자 총 6이 출력됨
Seek메서드
특정위치로 이동해라
3씩이동이 아닌 3위치로 이동해라 라는 뜻
바이트 단위다 마찬가지로.
f = open("test/newfile.txt", encoding='utf-8')
# Hi 안녕하세요.
print(f.tell()) # 0
print(f.seek(3)) # H i 공백 = 현재 위치: 공백
print(f.tell()) # 3
print(f.seek(f.tell() + 3)) # f.seek(6) -> 안
print(f.read(1)) # 그 다음 한 글자: "녕"
f.close()
이런 원리다. 영어 1바이트 공백1바이트 한글 3바이트
Hello
World
Python!
Monthy
Python
a
b
로 파일 저장했을때
\n 공백이 마지막에 출력됨
print(f.seek(f.tell() + 4)) 로 할경우
W가 마지막에 출력됨
With 구문
파일 열면 자동으로 닫아주는 역할
with 자원호출함수 as 변수:
이구역 안에서 파일을 다뤄주면된다.
여러 개의 파일도 함께 열어줄수 있다.
f = open("test/newfile.txt", encoding='utf-8')
# Hi 안녕하세요.
print(f.tell()) # 0
print(f.seek(3)) # H i 공백 = 현재 위치: 공백
print(f.tell()) # 3
print(f.seek(f.tell() + 3)) # f.seek(6) -> 안
print(f.read(1)) # 그 다음 한 글자: "녕"
f.close()
with(
open("test/newfile.txt", encoding='utf-8') as f1,
open("test/text.txt", encoding='utf-8') as f2
):
content1 = f1.read()
content2 = f2.read()
print(content1)
print(content2)
두개의 파일을 차례대로 읽어온다.
Hello
World
Python!
Monthy
Python
a
b
Hello
Python
dwdwjdwjjdw
123123
예외
비정상적으로 종료되지 않게 끔 처리 하는것 예외처리라고 한다.
Try: 예외가 발생할수 있는 가능성이 있는코드
Except: 예외가 발생할때 처리할 코드
Excepet:예외이름:
처리할 코드
버그를 숨기는 것이 아니라 현실 세계의 예측 불가능함을 견디게 하는 안전벨트의 역할
EAFP: Easier to Ask Forgiveness than Permission (허락보다 용서가 더 쉽다)
문제가 생기면 예외를 잡으면 된다! 파이썬은 실행 후, 예외를 처리하는 것을 권장
LBYL: Look Before You Leap (뛰기 전에 보라)
실행하기 전에 에러가 날만한 것을 잡아라! EAFP Java 계열의 예외처리 철학 조건문을 통해 에러가 날만한 상황을 검사
여러 예외의 종류
ZeroDivisionError
try:
result = 10 / 0
except ZeroDivisionError as e:
print("0으로 나눌 수 없습니다:", e)
0으로 나눌 수 없습니다: division by zero
잘되면 try 안되면 except로 가게 된다.
FileNotFoundError
존재하지 않는 파일에 대해 접근했을 때 발생
try:
f = open("test/text.txt", "r")
print(f.read())
except FileNotFoundError as e: # 오류 발생 시 이동
print("파일을 찾을 수 없습니다.:", e)
Hello
Python
dwdwjdwjjdw
123123
있는 파일을 열었을 때 콘솔로그가 잘 뜨고
try:
f = open("test/text1.txt", "r")
print(f.read())
except FileNotFoundError as e: # 오류 발생 시 이동
print("파일을 찾을 수 없습니다.:", e)
아닐 경우 익셉션
파일을 찾을 수 없습니다.: [Errno 2] No such file or directory: 'test/text1.txt'
ValueError
함수의 매개변수 등 잘못된 값이 전달될 때 발생
while True:
try:
number = int(input("숫자를 입력하세요:"))
break
except ValueError as e: # 오류 발생 시 이동
print("[Error] 숫자를 입력해주세요!")
print(number)
숫자를 입력하는 순간 while문을 벗어나게 된다.
다른 문자를 입력시 except문 터짐
숫자를 입력하세요:ㅇ
[Error] 숫자를 입력해주세요!
숫자를 입력하세요:a
[Error] 숫자를 입력해주세요!
숫자를 입력하세요:1
1
IndexError
인덱스의 범위를 벗어났을 때
try:
data = [1, 2, 3]
print(data[5])
except IndexError as e: # 오류 발생 시 이동
print("인덱스가 범위를 벗어났습니다.:", e)
인덱스가 범위를 벗어났습니다.: list index out of range
정상적 범위 2를 줬을 때 3출력
try except else finally
Except - 예외가 발생 했을 때 동작 * 0개 이상
Exception 같은 경우엔 except구문중 맨 마지막에넣기
진짜 알수 없는 에러일 때, 최후의 보루
Else - 예외가 발생하지 않았을 때의 동작 0 or 1개
finally - 예외와 상관없이 항상 실행되는 동작 0or 1개
예외가 발생하지 않았을 때
Try -> else -> finally
try:
a, b = map(int, input("두 정수를 입력하세요:").split())
except ValueError:
print('입력이 옳지 않습니다.')
except Exception:
print('알 수 없는 오류 발생')
else:
print(a + b)
finally:
print('프로그램 실행을 마쳤습니다.')
두 정수를 입력하세요:3 3
6
프로그램 실행을 마쳤습니다.
예외가 발생했을 때(사용자 입력 오류)
try → except → finally
두 정수를 입력하세요:2
입력이 옳지 않습니다.
프로그램 실행을 마쳤습니다.