Python

Python 파일 입출력 완전 정복: open(), read(), write()

python2ai 2025. 4. 12. 18:47

Python을 활용한 데이터 처리에서 빠질 수 없는 기술이 바로 파일 입출력(I/O) 입니다. 실무에서는 로그 저장, 설정 파일 읽기, 데이터 분석을 위한 CSV/텍스트 처리 등 다양한 상황에서 파일을 다루게 됩니다. 이 글에서는 open() 함수부터 파일을 읽고 쓰는 주요 메서드들까지, Python 파일 입출력의 핵심을 실무 중심으로 정리해보겠습니다.


1. 파일 열기: open() 함수

Python에서 파일 작업은 항상 open() 함수로 시작합니다. 이 함수는 지정한 파일을 열어 읽기, 쓰기, 추가 등 다양한 작업을 할 수 있는 파일 객체를 반환합니다.

f = open('example.txt', 'r')  # 읽기 모드로 파일 열기

주요 인자:

  • 첫 번째 인자: 파일 경로 또는 이름 (상대경로나 절대경로 모두 사용 가능)
  • 두 번째 인자: 모드 (읽기/쓰기/추가/이진 등)
모드 의미
'r' 읽기 (기본값, 파일이 없으면 에러 발생)
'w' 쓰기 (파일이 있으면 덮어쓰고, 없으면 새로 생성)
'a' 추가 (파일이 없으면 생성하고, 있으면 끝에 이어쓰기)
'rb', 'wb' 바이너리 모드 (텍스트가 아닌 파일 처리용)

주의: 'w' 모드는 기존 파일 내용을 완전히 지우므로 주의해서 사용해야 합니다.


2. 파일 읽기: read(), readline(), readlines()

파일을 읽을 때는 목적에 따라 적절한 메서드를 선택하는 것이 중요합니다.

(1) 전체 읽기: read()

파일의 모든 내용을 한 번에 문자열로 읽습니다.

with open('example.txt', 'r') as f:
    content = f.read()
    print(content)
  • 장점: 전체 내용을 문자열로 간단히 읽을 수 있음
  • 단점: 파일 크기가 큰 경우 메모리 사용량이 증가할 수 있음

(2) 한 줄씩 읽기: readline()

한 번에 한 줄씩 읽는 메서드로, 반복문과 함께 사용됩니다.

with open('example.txt', 'r') as f:
    line = f.readline()
    while line:
        print(line.strip())
        line = f.readline()
  • 줄 단위로 처리할 때 적합
  • .strip()은 줄 끝의 개행 문자(\n) 제거용

(3) 모든 줄 리스트로 읽기: readlines()

파일의 모든 줄을 리스트 형태로 한 번에 읽습니다.

with open('example.txt', 'r') as f:
    lines = f.readlines()
    for line in lines:
        print(line.strip())
  • 간단한 텍스트 분석이나 정렬 등에서 유용함

 

3. 파일 쓰기: write(), writelines()

(1) 문자열 쓰기: write()

문자열 하나하나를 직접 파일에 기록합니다.

with open('output.txt', 'w') as f:
    f.write("Hello, World!\n")
    f.write("두 번째 줄입니다.\n")
  • 줄바꿈이 필요할 경우 반드시 \n 추가
  • 기존 파일이 있다면 덮어씀

(2) 리스트 쓰기: writelines()

여러 줄을 한꺼번에 파일에 쓰고 싶을 때 사용합니다.

lines = ["첫째 줄\n", "둘째 줄\n", "셋째 줄\n"]
with open('output.txt', 'w') as f:
    f.writelines(lines)
  • 리스트 내 각 문자열 끝에 \n이 포함되어 있어야 줄바꿈 처리됨
  • 루프 없이 한 번에 여러 줄 쓰기 용도로 좋음

Tip: 파일 쓰기 시 encoding='utf-8'을 명시하면 한글 처리 오류를 방지할 수 있습니다.


4. 파일 열기 모드 정리

작업 목적에 따라 파일을 여는 모드를 다르게 설정해야 합니다.

모드 설명
'r' 읽기 전용 (파일이 존재하지 않으면 에러 발생)
'w' 쓰기 전용 (기존 내용 덮어씀, 없으면 새로 생성)
'a' 추가 전용 (기존 내용 보존, 뒤에 덧붙임)
'r+' 읽기 + 쓰기 (읽고 수정 가능, 파일 없으면 에러)
'rb', 'wb' 이진 파일 처리 (이미지, PDF 등)

r+b, a+b 등 복합 모드도 존재하며, 바이너리 파일 수정 시 사용됩니다.


5. with 문과 파일 자동 닫기

파일을 다 사용한 뒤 close()를 호출하지 않으면, 리소스 누수나 파일 잠금 문제가 발생할 수 있습니다.

with 문을 사용하면 파일을 열고 블록이 끝나는 시점에 자동으로 파일을 닫아줍니다.

with open('example.txt', 'r') as f:
    data = f.read()
  • with 문은 예외가 발생해도 파일을 안전하게 닫아주는 안정성 높은 구조입니다.
  • 실무에서는 반드시 with 문으로 파일을 다루는 습관을 들이는 것이 좋습니다.

6. CSV 파일 간단히 다루기

Python에는 표 형태의 데이터를 다루기 위한 csv 모듈이 내장되어 있습니다. 특히 데이터 분석, 로깅, 시스템 구성 파일 처리에서 유용하게 활용됩니다.

CSV 읽기

import csv

with open('data.csv', 'r', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
  • newline=''을 넣는 이유는 플랫폼에 따라 줄바꿈이 중복되는 것을 방지하기 위함입니다.

CSV 쓰기

with open('data.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['이름', '나이'])
    writer.writerow(['홍길동', 30])
  • writerow()는 한 줄씩, writerows()는 여러 줄을 리스트로 입력 가능

실제 프로젝트에서는 pandas.read_csv() 또는 to_csv()를 사용하는 경우가 더 많지만, 내장 csv 모듈로도 충분히 다양한 작업이 가능합니다.


마무리

이번 글에서는 Python의 파일 입출력 기능을 실무 중심으로 정리해보았습니다.

  • open() 함수로 파일을 연다
  • read(), write() 등의 메서드로 다양한 방식으로 데이터를 다룬다
  • with 문을 통해 리소스를 안정적으로 관리한다
  • CSV 파일도 다룰 수 있다

파일 입출력은 단순한 입문 기술처럼 보이지만, 실무에서는 데이터 파이프라인, 자동 보고서 생성, 시스템 로그 분석, 구성 파일 관리 등에서 필수적인 기능입니다.