5. Python 파일 읽기/쓰기 — open() 함수 완벽 정리
pip install 한 줄로 환경 설정 끝내고, 파일 입출력은 open() 하나로 끝내고! 자바 쓸 때 매번 I/O 코드 검색해가며 수십 줄씩 붙여넣던 시절과 비교하면 정말 신세계네요. 자바도 좋지만 생산성 면에서 파이썬은 정말 감동 그 자체입니다.
이 글에서는 Python에서 파일을 읽고 쓰는 기본 원리부터, open() 함수의 정확한 사용법, 텍스트와 CSV 파일 다루기, 그리고 VS Code에서 파일 경로 문제를 해결하는 방법까지 — 실무에서 바로 활용할 수 있는 수준으로 안내해 드리겠습니다.
파일 읽기/쓰기란 무엇인가 — 우편함을 여닫는 일
지금까지 작성한 Python 코드는 실행이 끝나면 결과가 화면에만 출력되고 사라졌습니다. 하지만 실제 업무에서는 데이터를 저장하고, 나중에 다시 불러와야 하는 경우가 대부분입니다. 일기를 쓰고 나중에 다시 펼쳐보는 것처럼 말입니다.
파일 입출력을 이해하는 가장 쉬운 방법은 우편함을 떠올리는 것입니다. 파일을 "쓴다"는 것은 우편함에 편지를 넣는 행위이고, 파일을 "읽는다"는 것은 우편함을 열어 안에 든 편지를 꺼내 보는 행위입니다. 그리고 이 우편함을 열고 닫는 도구가 바로 Python의 open() 함수입니다.
파일 입출력이 중요한 이유
- 데이터의 영속성을 확보합니다 — 프로그램이 종료되어도 결과가 사라지지 않습니다.
- 외부 데이터를 다룰 수 있습니다 — 엑셀, 로그, 설정 파일 등을 읽고 처리할 수 있습니다.
- 자동화의 핵심입니다 — 매일 들어오는 데이터를 자동으로 읽고 가공하는 업무 자동화의 출발점입니다.
- 다른 프로그램과 데이터를 주고받는 통로가 됩니다 — CSV, JSON 같은 표준 형식으로 협업이 가능해집니다.
open() 함수의 기본 구조
Python에서 파일을 다루는 모든 작업은 open() 함수에서 시작됩니다.
파일객체 = open("파일경로", "모드", encoding="utf-8")
여기서 **모드(mode)**는 우편함을 어떤 용도로 열 것인지를 지정하는 부분입니다. 우편함도 "편지를 넣으러 왔다"와 "편지를 확인하러 왔다"가 다른 행동이듯, 모드에 따라 파일에 대한 동작이 완전히 달라집니다.
주요 모드 정리
| 모드 | 의미 | 설명 |
|---|---|---|
"r" |
읽기(read) | 파일을 읽기 전용으로 엽니다. 파일이 없으면 오류가 발생합니다. |
"w" |
쓰기(write) | 새로 씁니다. 기존 내용이 있다면 전부 삭제 후 덮어씁니다. |
"a" |
추가(append) | 기존 내용 뒤에 새 내용을 이어붙입니다. |
"x" |
생성(create) | 새 파일을 만들되, 이미 존재하면 오류를 발생시킵니다. |
⚠️ 가장 흔한 실수:
"w"모드는 기존 파일 내용을 완전히 지워버립니다. 기존 내용을 보존하면서 추가하고 싶다면 반드시"a"모드를 사용해야 합니다.
파일 쓰기 — 텍스트 저장하기
기본 파일 쓰기
VS Code에서 새 파일을 만들고 아래 코드를 작성해 보겠습니다.
file = open("memo.txt", "w", encoding="utf-8")
file.write("오늘의 학습 내용을 기록합니다.\n")
file.write("Python 파일 입출력을 배우는 중입니다.\n")
file.close()
Ctrl + F5로 실행하면 같은 폴더 안에 memo.txt 파일이 생성됩니다. VS Code 왼쪽 탐색기(Explorer)를 확인하면 새로 생긴 파일을 바로 볼 수 있습니다.
💡
\n의 의미: 줄바꿈을 의미합니다. 이것이 없으면 모든 텍스트가 한 줄로 이어 붙어 저장됩니다.
with 구문 — 우편함을 자동으로 닫아주는 방법
위 코드에서 file.close()를 빠뜨리면 파일이 계속 열린 상태로 남아, 다른 프로그램이 그 파일에 접근하지 못하는 문제가 생길 수 있습니다. 이를 방지하기 위해 실무에서는 거의 항상 with 구문을 사용합니다.
with open("memo.txt", "w", encoding="utf-8") as file:
file.write("with 구문을 사용하면 자동으로 파일이 닫힙니다.\n")
with 블록을 벗어나는 순간 Python이 자동으로 파일을 닫아줍니다. 마치 자동으로 잠기는 현관문처럼, 깜빡하고 안 닫는 실수 자체를 원천 차단하는 방식입니다. 이후로는 이 방식을 기본으로 사용하시길 권장합니다.
파일 읽기 — 저장된 내용 불러오기
전체 내용을 한 번에 읽기
with open("memo.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
한 줄씩 읽기
파일이 길 경우, 한 줄씩 처리하는 방식이 효율적입니다.
with open("memo.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip()) # strip()으로 줄바꿈 문자 제거
모든 줄을 리스트로 읽기
with open("memo.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
print(lines)
VS Code에서 자주 발생하는 경로 문제
"파일을 찾을 수 없습니다" 오류의 진짜 원인
VS Code에서 파일 입출력 코드를 실행할 때 가장 많이 마주치는 오류가 FileNotFoundError입니다. 이 오류의 대부분은 상대 경로 기준점을 잘못 이해해서 발생합니다.
open("memo.txt", "r")처럼 경로를 짧게 적으면, Python은 이를 현재 작업 디렉토리(working directory) 기준으로 해석합니다. 그런데 VS Code의 작업 디렉토리는 항상 파일이 있는 폴더와 일치하지 않을 수 있습니다.
현재 작업 디렉토리 확인하기
import os
print(os.getcwd())
이 코드를 실행해서 출력된 경로가 예상한 위치와 다르다면, 그것이 오류의 원인입니다.
해결 방법 — 절대 경로 또는 스크립트 기준 경로 사용
import os
# 현재 파일(스크립트)이 있는 폴더를 기준으로 경로 설정
base_dir = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(base_dir, "memo.txt")
with open(file_path, "r", encoding="utf-8") as file:
print(file.read())
이렇게 작성하면 VS Code를 어떤 폴더에서 실행하든 항상 스크립트 파일과 같은 위치의 memo.txt를 정확히 찾아갑니다.
CSV 파일 다루기 — 실무에서 가장 많이 쓰는 형식
엑셀 데이터를 다룰 때 가장 흔히 만나는 형식이 CSV입니다. Python에는 이를 쉽게 처리할 수 있는 csv 모듈이 기본 내장되어 있습니다.
CSV 파일 쓰기
import csv
with open("members.csv", "w", encoding="utf-8", newline="") as file:
writer = csv.writer(file)
writer.writerow(["이름", "나이", "직업"])
writer.writerow(["김현욱", 35, "개발자"])
writer.writerow(["이하늘", 28, "디자이너"])
⚠️ 주의: Windows에서
newline=""옵션을 빠뜨리면 줄 사이에 빈 줄이 한 칸씩 추가되는 문제가 발생합니다. CSV를 다룰 때는 항상 이 옵션을 포함하시길 권장합니다.
CSV 파일 읽기
import csv
with open("members.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
for row in reader:
print(row)
마무리 — 핵심 요약
✅ Python 파일 읽기/쓰기 체크리스트
- 모드를 정확히 선택합니다 — 읽기는
"r", 쓰기(덮어쓰기)는"w", 추가는"a" with구문을 기본으로 사용합니다 — 파일을 자동으로 안전하게 닫아줍니다encoding="utf-8"을 항상 명시합니다 — 한글 깨짐 현상을 방지합니다- 경로 문제는
os.path.abspath(__file__)로 해결합니다 — 작업 디렉토리에 의존하지 않는 안전한 경로 설정 - CSV는
csv모듈을 사용합니다 — Windows에서는newline=""옵션을 잊지 않습니다
다음으로 알아두면 좋은 것
파일 입출력에 익숙해졌다면, 다음 단계로 json 모듈을 활용한 설정 파일 관리나, pandas 라이브러리를 이용한 대용량 데이터 처리로 넘어가시길 권장합니다. 단순한 텍스트 저장에서 시작해, 점차 구조화된 데이터를 다루는 방향으로 학습을 확장하면 실무 활용도가 크게 높아집니다.
댓글
댓글 쓰기