본문 바로가기
코딩교육/Python 초등교육에서 전문가까지

2단계 : 6. 텍스트 파일 열기 (open() 함수와 파일 모드)

by 제리토리 2025. 3. 27.
728x90
반응형

 

Python에서 파일 작업을 하기 위한 핵심 함수는 open()입니다. 이 함수는 로컬 파일 시스템에 있는 텍스트 또는 바이너리 파일을 열고, 읽기/쓰기/추가 등 다양한 작업을 할 수 있는 파일 객체(file object)를 반환합니다.

 

이 장에서는 open() 함수의 기본 사용법과 다양한 파일 열기 모드(read, write, append 등)에 대해 전문가 수준에서 깊이 있게 설명하고, 실전에서 자주 발생하는 오류와 최적 사용 팁까지 함께 다룹니다.

 

 

1. open() 함수의 기본 사용법

 

㉮ 기본 구조

file_object = open(file_path, mode)

 

인자명 설명
file_path 열고자 하는 파일의 경로 (상대 또는 절대 경로)
mode 파일을 열 때 사용할 동작 모드 (예: "r", "w", "a" 등)

 

✅ 반환값은 **파일 객체(file object)**로, 해당 객체를 통해 읽기, 쓰기, 닫기 등의 작업을 수행할 수 있습니다.

 

 

2. 파일 모드(mode) 종류와 특징

 

모드 설명
'r' 읽기 전용 모드 (기본값). 파일이 존재하지 않으면 오류 발생
'w' 쓰기 전용 모드. 파일이 없으면 생성, 있으면 내용을 모두 지움
'a' 추가 모드. 기존 파일 끝에 내용을 추가
'x' 베타적 생성 모드. 파일이 존재하면 오류 발생
'b' 바이너리 모드 (텍스트 파일이 아닌 이진 파일 처리용)
't' 텍스트 모드 (기본값)
'+' 읽기/쓰기 동시 사용 (예: 'r+' , 'w+' , 'a+')

 

✅ 파일 모드는 조합해서 사용 가능

  • 'rt': 텍스트 모드로 읽기 (기본값)

  • 'wb': 바이너리 모드로 쓰기

  • 'r+': 파일 읽기와 쓰기를 동시에 가능 (파일 내용 덮어쓰기 가능)

 

 

3. 파일 열기 예제

 

㉮ 읽기 전용 모드 'r'

file = open("example.txt", "r")
content = file.read()
print(content)
file.close()

  • example.txt 파일이 존재해야 하며, 없으면 FileNotFoundError 발생.

 

 

㉯ 쓰기 전용 모드 'w'

file = open("output.txt", "w")
file.write("Hello, Python!")
file.close()

  • 기존 output.txt 파일이 있을 경우 내용이 모두 삭제됨.

  • 파일이 없으면 새로 생성됨.

 

 

㉰ 추가 모드 'a'

file = open("log.txt", "a")
file.write("새로운 로그 내용 추가\n")
file.close()

기존 파일의 내용은 유지되며, 새로운 내용이 끝에 추가됨.

 

 

㉱ 읽기/쓰기 동시 'r+'

file = open("data.txt", "r+")
file.write("처음 부분에 덮어쓰기")
file.close()

읽고 쓰는 기능을 동시에 수행하며, 쓰기 작업은 파일 시작점부터 진행됨.

 

 

㉲ 파일이 없을 때 'x' 사용

file = open("newfile.txt", "x")
file.write("이 파일은 새로 생성됩니다.")
file.close()

파일이 존재하면 오류, 존재하지 않을 때만 새로 생성.

 

 

4. 파일 모드 사용 시 주의사항

 

❗ w 모드는 기존 데이터를 모두 삭제함

  • 실수로 기존 데이터를 삭제하지 않도록 주의해야 합니다.

 

❗ r 모드는 파일이 없으면 오류 발생

  • 예외 처리(try-except) 또는 os.path.exists()를 통해 존재 여부를 확인할 수 있습니다.

 

❗ 바이너리 파일 처리 시에는 'b' 모드를 꼭 사용

  • 텍스트 파일이 아닌 이미지, 오디오, PDF 파일 등은 'rb', 'wb'로 열어야 정상 작동.

 

 

 

5. 실무 팁: with 문과 함께 사용하기 (권장)

 

open()으로 파일을 연 뒤 close()를 반드시 호출해야 하지만, 실수로 close()를 빠뜨리면 자원 누수 발생 가능.

이를 방지하기 위해 with 구문을 사용하는 것이 가장 안전하고 파이썬답다(Pythonic).

with open("data.txt", "r") as file:
    content = file.read()
    print(content)
# 파일은 with 블록을 벗어나면 자동으로 닫힘

 

장점

  • 자동으로 파일 닫힘 (file.close() 생략 가능)

  • 예외 발생 시에도 안전하게 자원 해제

 

 

6. 고급 예제: 모드별 처리 구분
def open_file_safely(filepath, mode="r"):
    try:
        with open(filepath, mode, encoding='utf-8') as f:
            if "r" in mode:
                return f.read()
            elif "w" in mode or "a" in mode:
                f.write("테스트 내용\n")
                return "쓰기 완료"
    except FileNotFoundError:
        return "파일이 존재하지 않습니다."
    except PermissionError:
        return "권한 오류"

 ✅ 파일의 존재 유무, 쓰기 권한 등을 고려한 안전한 함수 예제.

 

 

7. 요약

 

기능 예시 설명
읽기 open("file.txt", "r") 기본 읽기 모드
쓰기 open("file.txt", "w") 기존 내용 삭제 후 쓰기
추가 open("file.txt", "a") 기존 내용 유지하고 끝에 추가
바이너리 open("file.bin", "rb") 이진 파일 읽기
읽기/쓰기 open("file.txt", "r+") 읽고 쓰기 모두 가능
안전 열기 with open(...) as f: 자동으로 파일 닫힘

 

728x90
반응형