너도 할 수 있는, 너도밤나무 코딩

[Python] 파일 입출력(File I/O) 심화 가이드 본문

프로그래밍 언어/파이썬

[Python] 파일 입출력(File I/O) 심화 가이드

곡마일장 2025. 9. 10. 10:03
반응형

파이썬에서 파일 입출력은 데이터를 외부 파일에 저장하고 읽어오는 중요한 기능입니다.
이번 글에서는 파일 열기, 읽기/쓰기, 텍스트/바이너리 처리, with문 활용, 예외 처리, 실전 예제까지 자세히 다룹니다.


1. 파일 열기와 닫기

파이썬에서는 open() 함수로 파일을 열 수 있습니다.

# 파일 열기
f = open('example.txt', 'w')  # 쓰기 모드
f.write('Hello, Python File I/O!')
f.close()  # 반드시 닫기
  • 'r' : 읽기 (기본값)
  • 'w' : 쓰기 (파일이 존재하면 덮어쓰기)
  • 'a' : 추가
  • 'b' : 바이너리 모드
  • '+' : 읽기/쓰기

  • 파일 닫기를 잊으면 데이터가 저장되지 않거나 리소스 누수가 발생할 수 있음
  • with 문을 사용하면 자동으로 파일 닫기 가능
with open('example.txt', 'w') as f:
    f.write('자동으로 닫힙니다.')

2. 파일 읽기

전체 읽기

with open('example.txt', 'r') as f:
    content = f.read()
print(content)

한 줄씩 읽기

with open('example.txt', 'r') as f:
    for line in f:
        print(line.strip())  # 줄바꿈 제거

리스트로 읽기

with open('example.txt', 'r') as f:
    lines = f.readlines()
print(lines)

3. 파일 쓰기

문자열 쓰기

with open('output.txt', 'w') as f:
    f.write('첫 번째 줄
')
    f.write('두 번째 줄
')

여러 줄 쓰기

lines = ['라인1
', '라인2
', '라인3
']
with open('output.txt', 'w') as f:
    f.writelines(lines)

4. 바이너리 파일 처리

# 이미지 파일 읽기
with open('image.png', 'rb') as f:
    data = f.read()

# 이미지 파일 쓰기
with open('copy_image.png', 'wb') as f:
    f.write(data)

5. 예외 처리와 안전한 파일 처리

파일 처리 시 예외가 발생할 수 있습니다.

try:
    with open('non_exist.txt', 'r') as f:
        content = f.read()
except FileNotFoundError:
    print('파일이 존재하지 않습니다.')
except IOError as e:
    print(f'입출력 오류: {e}')

6. 실전 예제: 로그 파일 기록

def log_message(message, filename='app.log'):
    from datetime import datetime
    with open(filename, 'a') as f:
        time_str = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        f.write(f'[{time_str}] {message}
')

log_message('프로그램 시작')
log_message('데이터 처리 완료')

특징

  • a 모드로 로그 누적
  • datetime으로 시간 기록
  • with 문으로 자동 닫기

7. 팁과 베스트 프랙티스

  1. with 문 사용: 자동으로 파일 닫기, 예외 처리 안전
  2. 모드 확인: 읽기, 쓰기, 추가, 바이너리 모드 혼동 주의
  3. 예외 처리: 파일 존재 여부, 권한 문제 대비
  4. 큰 파일 처리: 한 줄씩 읽거나 iter 사용
  5. 경로 관리: ospathlib로 상대/절대 경로 안전하게 처리
반응형