Python 파일 처리 마스터리: Pathlib와 Context Managers로 흔한 함정 피하기

발행: (2026년 1월 6일 오후 03:56 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

소개

파일 처리 버그는 눈에 잘 띄지 않을 수 있습니다—프로그램이 바로 크래시되지는 않지만 데이터가 조용히 손상되거나 자원이 누수될 수 있습니다. 이러한 문제는 스크립트가 로컬 머신에서는 정상 작동하지만 인코딩 불일치나 파일 디스크립터 고갈 때문에 서버에서는 실패할 때 특히 고통스럽습니다. 현대적인 도구인 pathlib컨텍스트 매니저를 활용해 Python 파일 I/O를 마스터하면 더 신뢰할 수 있고 크로스‑플랫폼 코드를 작성할 수 있습니다.

pathlib와 컨텍스트 매니저 사용하기

전통적인 접근 방식:

f = open('file.txt')
content = f.read()
f.close()

예외가 발생하면 파일이 닫히지 않을 수 있습니다. 관용적인 해결책은 with 컨텍스트 매니저와 OS‑독립적인 경로를 위한 pathlib을 함께 사용하는 것입니다:

from pathlib import Path

file_path = Path("example.txt")
with file_path.open(encoding="utf-8") as f:
    content = f.read()
    print(content)

encoding="utf-8"을 지정하면 Windows, macOS, Linux 전반에 걸쳐 일관된 동작을 보장합니다.

파일을 효율적으로 읽기

큰 파일의 경우 전체 내용을 메모리로 로드하지 마세요:

with file_path.open(encoding="utf-8") as f:
    for line in f:
        process(line.strip())

라인 단위로 반복하면 데이터를 스트리밍하게 되므로 사용 가능한 RAM보다 큰 파일도 처리할 수 있습니다.

파일을 안전하게 쓰기

항상 with 블록 안에서 파일을 열어 플러시와 닫기를 보장하세요:

from pathlib import Path

with Path("output.txt").open("w", encoding="utf-8") as f:
    f.write("Hello, Python world!\n")

모드를 빼먹으면 Python은 기본적으로 읽기 전용으로 열며 io.UnsupportedOperation 예외를 발생시킵니다. 로그를 추가하려면:

with Path("log.txt").open("a", encoding="utf-8") as f:
    f.write(f"Error occurred at {timestamp}\n")

구조화된 포맷 다루기

CSV

문자열을 직접 나누는 대신 csv 모듈을 사용하세요:

import csv
from pathlib import Path

with Path("data.csv").open(encoding="utf-8", newline="") as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row["column_name"])  # 컬럼 순서가 바뀌어도 동작

newline="" 인자는 Windows에서 불필요한 빈 줄이 생기는 것을 방지합니다.

JSON

JSON을 안전하게 직렬화·역직렬화하세요:

import json
from pathlib import Path

data = {"key": "value"}
with Path("config.json").open("w", encoding="utf-8") as f:
    json.dump(data, f, indent=4)  # 사람이 읽기 쉬운 출력

흔히 저지르는 실수와 해결책

실수해결책
with 없이 파일을 닫지 않음항상 컨텍스트 매니저 사용
인코딩 무시encoding="utf-8"을 명시적으로 설정
경로 구분자를 하드코딩크로스‑OS 경로를 위해 pathlib 사용
큰 파일을 전체 메모리로 읽음반복문(for line in f:)으로 스트리밍
파일 모드 혼동(r+ vs w)작업에 맞는 올바른 모드 선택

추가 읽을거리

프로덕션 수준의 기법, 오류 처리, 고급 도구 등을 다루는 심층 가이드는 Mastering Python File I/O: How to Read and Write Files Easily 를 참고하세요.

Back to Blog

관련 글

더 보기 »

Logger 모듈을 사용한 FastAPI 기본 로깅

Application이 Production에서 충돌할 때 Production에서 애플리케이션이 충돌했으며 사용자는 다음에 무엇을 해야 할지 확신하지 못했습니다. 나는 작년에 이와 같은 상황을 프로젝트에서 경험했습니다.