나혼자 코딩
Python 파일 입출력 완전 정복: open(), read(), write() 본문
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 파일도 다룰 수 있다
파일 입출력은 단순한 입문 기술처럼 보이지만, 실무에서는 데이터 파이프라인, 자동 보고서 생성, 시스템 로그 분석, 구성 파일 관리 등에서 필수적인 기능입니다.
'Python' 카테고리의 다른 글
| Python 클래스와 객체 이해하기: OOP의 기초부터 실무 활용까지 (1) | 2025.05.08 |
|---|---|
| Python의 예외 처리: try, except, finally 그리고 예외 정의하기 (0) | 2025.03.17 |
| Python의 주요 데이터 구조: 리스트, 튜플, 딕셔너리, 집합 (0) | 2025.03.12 |
| Python 함수: 정의, 호출, 매개변수, 반환값 (0) | 2025.03.11 |
| Python 제어문: 조건문과 반복문 (0) | 2025.03.08 |