반응형
안녕하세요! 파이썬 학습 여덟 번째 시간입니다. 지금까지 우리가 만든 데이터와 변수들은 프로그램이 종료되면 사라졌습니다.
오늘은 우리가 만든 데이터를 영구적으로 저장하고, 필요할 때 다시 불러올 수 있는 핵심 기능인 **파일 입출력(File Input/Output)**에 대해 알아보겠습니다. 이 기능을 통해 파이썬은 외부 환경(하드 디스크)과 소통하게 됩니다.
1. 파일 입출력의 기본 절차
파일 입출력(I/O)은 항상 다음 세 단계를 거칩니다.
- 파일 열기 (Open): open() 함수를 사용하여 파일에 대한 연결 통로를 만듭니다.
- 데이터 작업 (Read/Write): 통로를 통해 데이터를 읽거나 씁니다.
- 파일 닫기 (Close): 작업을 마친 후 close() 함수로 통로를 닫아 파일 손상 및 리소스 누수를 방지합니다.
2. 파일 열기: open()과 모드(Mode)
파일을 열 때는 어떤 목적으로 열 것인지 **모드(Mode)**를 지정해야 합니다.
| 모드 | 목적 | 파일 존재 여부 |
| 'r' (Read) | 읽기 전용 | 파일이 없으면 오류 발생 |
| 'w' (Write) | 쓰기 전용 | 파일이 없으면 새로 생성, 있으면 내용 모두 지우고 새로 씀 (주의!) |
| 'a' (Append) | 추가 쓰기 | 파일이 없으면 새로 생성, 있으면 내용 끝에 추가 |
💡 기본 파일 열기 구조 (사용 비권장)
Python
f = open("new_data.txt", 'w') # 파일 열기 (쓰기 모드)
f.write("이 데이터가 파일에 저장됩니다.") # 데이터 쓰기
f.close() # 파일 닫기 (필수)
3. 안전한 파일 처리: with 구문 (권장)
만약 파일 작업 도중 예기치 않은 오류가 발생하면 f.close()가 실행되지 않아 파일이 손상되거나 리소스 낭비가 발생할 수 있습니다.
with 구문을 사용하면 이 문제를 안전하게 해결할 수 있습니다. with 블록이 종료되는 순간 파이썬이 자동으로 close()를 호출해 줍니다.
Python
with open("my_data.txt", 'w') as f:
f.write("첫 번째 줄입니다.\n")
f.write("두 번째 줄입니다.\n")
# with 블록을 벗어나는 순간 자동으로 파일이 닫힙니다.
4. 파일에 데이터 쓰기 ('w' 또는 'a')
4-1. 쓰기 ('w') 예제: 기존 내용 덮어쓰기
Python
# 기존 파일이 있다면 내용이 모두 지워지고 새로 쓰여집니다.
with open("report.txt", 'w', encoding='utf-8') as f:
data = "파이썬 파일 입출력 테스트\n"
f.write(data)
list_data = ["Alice\n", "Bob\n", "Charlie\n"]
f.writelines(list_data) # 리스트의 내용을 한 번에 쓰기
# 결과: report.txt 파일에는 '파이썬 파일 입출력 테스트'와 리스트 내용만 남습니다.
4-2. 추가 쓰기 ('a') 예제: 내용 이어 붙이기
Python
# 'a' 모드는 파일 내용의 맨 끝에 새로운 내용을 추가합니다.
with open("report.txt", 'a', encoding='utf-8') as f:
f.write("\n---추가된 내용---")
# 결과: 기존 내용 다음에 '---추가된 내용---'이 이어 붙여집니다.
5. 파일에서 데이터 읽기 ('r')
파일을 읽을 때는 목적에 따라 여러 함수를 사용할 수 있습니다.
5-1. read(): 전체 내용을 하나의 문자열로 읽기
Python
with open("report.txt", 'r', encoding='utf-8') as f:
content = f.read() # 파일 전체 내용을 하나의 문자열로 저장
print(content)
5-2. readline(): 한 줄씩 읽기
주로 반복문(while 또는 for)을 사용하여 파일의 내용을 한 줄씩 처리할 때 사용합니다.
Python
with open("report.txt", 'r', encoding='utf-8') as f:
line = f.readline() # 첫 번째 줄을 읽고
print(line.strip()) # strip()으로 줄 바꿈 문자 제거
line = f.readline() # 다음 줄을 읽습니다.
print(line.strip())
5-3. readlines(): 모든 줄을 리스트로 읽기
파일의 모든 줄을 각각 리스트의 요소로 저장하여 한 번에 가져옵니다.
Python
with open("report.txt", 'r', encoding='utf-8') as f:
all_lines = f.readlines() # 모든 줄이 리스트 형태로 저장됨
for line in all_lines:
print(line.strip())
# 결과: 리스트의 각 요소가 출력됩니다.
인코딩(Encoding) 문제:
encoding='utf-8' 옵션은 한글과 같은 다양한 문자를 파일에 올바르게 읽고 쓰기 위해 매우 중요합니다. 파일을 열 때는 반드시 명시해 주는 것이 좋습니다.
반응형
'개발 > Python' 카테고리의 다른 글
| [초급반] Step 10. 파이썬 응용 시작: 데이터 분석 라이브러리 맛보기 (0) | 2025.12.16 |
|---|---|
| [초급반] Step 9. 모듈과 패키지: 외부 라이브러리 사용하기 (0) | 2025.12.16 |
| [초급반] Step 7. 함수(Function) 정의 및 활용: 코드를 모듈화하는 방법 (0) | 2025.12.16 |
| [초급반] Step 6. 딕셔너리(Dictionary)와 셋(Set): 키-값 구조와 중복 없는 데이터 (0) | 2025.12.16 |
| [초급반] Step 5. 리스트(List)와 튜플(Tuple): 순서가 있는 데이터 다루기 (0) | 2025.12.16 |