본문 바로가기
프로그래밍언어/파이썬[중급]

[파이썬][중급] Chapter40. 파일 입출력 고급 기법

by about_IT 2025. 5. 24.
728x90

파이썬의 파일 입출력(I/O)은 기본적인 open() 함수 외에도 다양한 고급 기능들을 제공합니다. 특히 바이너리 파일 처리, 인코딩 설정, 버퍼링 제어, 대용량 파일 처리 등에 대한 이해는 실무에서 매우 중요합니다.


● 다양한 인코딩 처리

파일을 읽거나 쓸 때 인코딩을 명시하지 않으면 시스템 기본값이 사용되므로, 명시적으로 encoding을 지정하는 것이 좋습니다.

with open("data.txt", "r", encoding="utf-8") as f:
    content = f.read()

특수 문자나 한글이 포함된 파일은 UTF-8 또는 CP949 등을 상황에 따라 선택해야 합니다.


● 바이너리 파일 처리

이미지나 영상 등의 바이너리 데이터를 처리할 때는 "rb", "wb" 모드를 사용합니다.

with open("image.jpg", "rb") as f:
    data = f.read()

with open("copy.jpg", "wb") as f:
    f.write(data)

● 파일 객체 반복 처리

파일을 줄 단위로 읽을 때는 반복문을 사용하는 것이 메모리 효율에 좋습니다.

with open("large.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())

readlines() 대신 반복문을 활용하면 대용량 파일도 문제없이 처리할 수 있습니다.


● seek과 tell로 위치 제어

seek()은 파일 내 커서 위치를 이동하고, tell()은 현재 위치를 반환합니다.

f = open("sample.txt", "r")
print(f.tell())    # 현재 위치 출력
f.seek(5)          # 5번째 바이트로 이동
print(f.read(3))   # 3바이트 읽기
f.close()

● 파일 버퍼링 제어

open() 함수의 buffering 파라미터로 버퍼 크기를 조절할 수 있습니다. buffering=1은 라인 버퍼링, 0은 비버퍼링(바이너리 전용), 그 외 정수는 해당 크기만큼 버퍼링합니다.

f = open("data.txt", "w", buffering=1, encoding="utf-8")

● 마무리

고급 파일 입출력 기법을 익히면 대용량 로그 분석, 파일 백업, 바이너리 조작 등 다양한 작업을 효율적으로 처리할 수 있습니다. 특히 인코딩과 버퍼링은 실전에서 문제가 발생하기 쉬운 영역이므로 정확히 이해하고 사용해야 합니다.

728x90