본문 바로가기
language/python

파일 입출력과 with 문 – Python의 안전한 파일 처리 방식

by 죄니안죄니 2025. 4. 19.

들어가며

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

댓글