들어가며
Python에서 파일을 읽고 쓰는 일은 매우 자주 발생하는 작업입니다.
기본적으로 open() 함수를 사용하여 파일을 다루지만, 이와 함께 자주 사용되는 것이 컨텍스트 매니저(Context Manager) 와 with 문입니다.
이 글에서는 Python의 파일 입출력 기본 문법과 함께, with 문을 활용한 안전한 리소스 관리 방법을 설명합니다.
1. 파일 열기와 닫기 – 기본 구조
f = open("hello.txt", "w")
f.write("Hello, world!\n")
f.close()
- open() 함수로 파일을 열고, close()로 반드시 닫아야 함
- w: 쓰기 모드 (기존 내용 삭제)
- r: 읽기 모드 (기본값)
- a: 추가 모드 (기존 내용 유지, 이어쓰기)
읽기 예시
f = open("hello.txt", "r")
content = f.read()
print(content)
f.close()
파일을 닫지 않으면 자원 누수나 파일 잠금 문제가 생길 수 있음
2. with 문 – 컨텍스트 매니저
with 문은 파일을 자동으로 닫아주는 문법입니다.
with open("hello.txt", "r") as f:
content = f.read()
print(content)
- with 블록을 벗어나면 f.close()가 자동 호출됨
- 예외가 발생하더라도 안전하게 자원 정리 가능
쓰기 예시
with open("output.txt", "w") as f:
f.write("Python 파일 처리 예제\n")
3. 파일 읽기 함수들 요약
함수 | 설명 |
f.read() | 파일 전체를 문자열로 읽음 |
f.readline() | 한 줄씩 읽음 |
f.readlines() | 모든 줄을 리스트로 반환 |
줄 단위 반복
with open("log.txt") as f:
for line in f:
print(line.strip())
4. 텍스트 vs 바이너리 모드
- 텍스트 모드 (기본): "r", "w"
- 바이너리 모드: "rb", "wb"
with open("image.png", "rb") as f:
data = f.read()
5. 사용자 정의 컨텍스트 매니저 (고급)
class CustomContext:
def __enter__(self):
print("자원 획득")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("자원 반환")
with CustomContext():
print("작업 수행")
- __enter__() / __exit__() 메서드를 구현하여 사용자 정의 with 문 지원 가능
마치며
파일 입출력은 실무에서 매우 자주 쓰이는 기본 작업입니다.
with 문을 활용한 컨텍스트 매니저는 에러가 발생해도 안전한 자원 해제를 보장하므로, 파일 처리 시 필수로 사용하는 습관을 들이는 것이 좋습니다.
📂 다음 글에서는:
- JSON 파일 입출력
- pickle을 통한 객체 직렬화
- open() 함수의 고급 매개변수들
등을 이어서 다루겠습니다.
📌 이전 글 보러가기
👉 예외 처리 (try-except)와 사용자 정의 예외
📌 다음 글 미리보기
👉 typing 모듈로 타입 힌트 명시하기 (Python 3.5+)
📚 언어 Python 시리즈 전체 보기
👉 https://jobreview.tistory.com/category/language/python
'language > python' 카테고리의 다른 글
typing 모듈로 타입 힌트 명시하기 (Python 3.5+) (0) | 2025.04.19 |
---|---|
예외 처리 (try-except)와 사용자 정의 예외 – Python 오류 처리 구조 이해하기 (0) | 2025.04.19 |
클래스, 상속, dunder 메서드 – Python 객체지향 기초 정리 (0) | 2025.04.19 |
함수, 매개변수, *args, **kwargs, 스코프, 클로저, 데코레이터 – Python 함수 구조 정리 (0) | 2025.04.19 |
조건문, 반복문, 리스트 컴프리헨션 – Python 제어 흐름 완전 정복 (0) | 2025.04.19 |
댓글