- 파일 열기 (open 함수)
file_object = open("파일이름", "모드")
- 주요 모드 종류
- "r": 읽기 전용 모드(기본값). 해당 파일이 존재하지 않으면 에러 발생
- "w": 쓰기 전용 모드. 파일이 존재하면 내용을 모두 지우고, 존재하지 않으면 새로 만듦
- "a": 추가(append)모드. 파일의 끝에 새로운 내용을 덧붙임. 파일이 없으면 새로 만듦
- "x": 쓰기 전용으로 새 파일을 만들기 위한 모드. 파일이 이미 존재하면 에러 발생
- "r+": 읽기/쓰기 겸용 모드. 기존 파일에 대해 읽고 쓰기 모두 가능
- "b": 바이너리 모드. "rb", "wb" 등의 형태로 다른 모드와 조합하여, 텍스트가 아닌 이미지, 음악 파일 등 이진 데이터 처리 시 사용
- "t": 텍스트 모드(기본값). "r","w" 등이 기본적으로 "t" 모드임
- 파일 읽기
- 읽기 모드("r")로 연 파일에 대해 다음과 같은 메서드를 사용해서 내용을 읽을 수 있음
- read() : 파일 전체 내용을 문자열로 읽어옴
- readline() : 파일에서 한 줄씩 읽어옴
- readlines() : 파일 전체 내용을 한 줄씩 나누어 리스트로 반환
file = open("example.txt", "r", encoding="utf-8") # UTF-8 인코딩 지정 가능
content = file.read() # 파일 전체 읽기
print(content)
line = file.readline() # 첫 번째 줄 읽기
print(line)
line = file.readline() # 두 번째 줄 읽기
print(line)
lines = file.readlines() # 모든 줄을 읽어 리스트로 반환
for l in lines:
print(l.strip()) # strip()으로 양 끝 공백 제거
file.close()
- 파일 쓰기
- 파일에 쓰기 위해서는 "w", "a", "r+", "x" 등 쓰기 기능이 지원되는 모드로 열어야 함
- "w" 모드: 기존 내용을 모두 지우고 새로 쓰기 시작함
- "a" 모드: 기존 파일의 끝에 내용을 이어 붙임
- with 문을 이용한 파일 처리
- with 문 사용하면 블록이 끝날 때 자동으로 파일을 닫아주기 때문에 close()를 깜빡하는 실수를 방지할 수 있음
with open("example.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
# 여기서는 with 블록을 빠져나가면 f가 자동으로 close() 처리됩니다.
# 쓰기 예시
with open("output.txt", "w", encoding="utf-8") as f:
f.write("안녕하세요!\n")
f.write("이 내용은 output.txt에 쓰여집니다.\n")
# with 블록 종료 시 자동으로 f.close() 호출
- 바이너리 파일 다루기
- 이미지, 오디오, 영상, PDF 등 텍스트로 이루어지지 않은 파일은 바이너리 모드("b")로 열어야함
# 이미지 파일 복사 예제
with open("image.jpg", "rb") as src:
data = src.read()
with open("copy.jpg", "wb") as dst:
dst.write(data)
- "rb"로 원본 이미지를 읽고, "wb"로 복사본 작성함
- 텍스트 인코딩 관련 인자는 필요 없음
- 예외 처리
- 파일이 존재하지 않거나 경로가 잘못된 경우
- 권한 부족으로 파일을 열 수 없는 경우
- 디스크 문제가 발생한 경우
- → try-except 구문 사용
try:
with open("nonexistent.txt", "r", encoding="utf-8") as f:
data = f.read()
print(data)
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
except PermissionError:
print("파일에 접근할 권한이 없습니다.")
'Python 공부' 카테고리의 다른 글
| 클래스, 생성자, 캡슐화, 상속, 오버라이딩, 매직 메서드 (0) | 2026.01.14 |
|---|---|
| 리스트, 튜플, 딕셔너리 (1) | 2026.01.10 |
| 입출력, 변수, 문자열 (0) | 2026.01.10 |
| 정적 할당과 동적 할당 / 파이썬 int 자료형 범위 (0) | 2026.01.09 |
| 타입 힌트, is 연산자 vs == 연산자 (0) | 2026.01.09 |