open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
파일을 열고 해당 파일 객체를 반환합니다. 파일을 열 수 없으면 OSError가 발생합니다. 이 함수의 사용 예는 "파일 읽기와 쓰기" 섹션을 참조하세요.
- file: 파일의 경로(현재 작업 디렉토리를 기준으로 하는 절대 경로나 상대 경로) 또는 래핑할 파일의 정수형 파일 디스크립터입니다. (파일 디스크립터가 주어질 경우, 반환된 I/O 객체가 닫힐 때 디스크립터도 닫히지만 closefd가 False로 설정된 경우는 예외입니다.)
- mode: 파일을 열 때 사용할 모드를 지정하는 선택적 문자열로 기본값은 'r'(읽기, 텍스트 모드)입니다. 다른 일반적인 값으로는 다음이 있습니다:
- 'w': 쓰기(이미 파일이 존재하면 내용을 지움)
- 'x': 독점 생성(이미 파일이 존재하면 실패)
- 'a': 추가 쓰기(일부 Unix 시스템에서는 현재의 파일 탐색 위치와 관계없이 모든 쓰기가 파일의 끝에 추가됨)
- 'b': 바이너리 모드
- 't': 텍스트 모드(기본값)
- '+': 읽기와 쓰기 모두 가능
기본 모드는 'r'(텍스트 읽기, 'rt'의 동의어)입니다. 'w+'와 'w+b' 모드는 파일을 열고 내용을 지웁니다. 'r+'와 'r+b' 모드는 파일을 열지만 내용을 지우지 않습니다.
Python은 바이너리와 텍스트 I/O를 구분합니다. 바이너리 모드로 열린 파일은 내용을 디코딩하지 않고 바이트 객체로 반환합니다. 텍스트 모드로 열린 파일은 내용을 문자열로 반환하며, 바이트는 플랫폼 종속적인 인코딩(또는 명시된 경우 지정된 인코딩)을 사용해 디코딩됩니다.
Python은 기본 운영 체제의 텍스트 파일 개념에 의존하지 않으며 모든 처리는 Python 자체에서 수행되므로 플랫폼에 독립적입니다.
- buffering: 버퍼링 정책을 설정하는 선택적 정수입니다.
- 0: 버퍼링 사용 안 함(바이너리 모드에서만 허용)
- 1: 라인 버퍼링 사용(텍스트 모드에서 쓰기 시에만 가능)
- 1보다 큰 정수: 고정 크기(바이트 단위) 청크 버퍼를 사용
buffering 인자가 제공되지 않을 경우 기본 정책은 다음과 같습니다:
- 바이너리 파일은 고정 크기 청크로 버퍼링됩니다(보통 4096 또는 8192 바이트).
- "대화형" 텍스트 파일(예: isatty()가 True를 반환하는 파일)은 라인 버퍼링을 사용합니다.
- encoding: 텍스트 모드에서 파일을 디코딩하거나 인코딩할 때 사용할 인코딩 이름입니다. 기본값은 플랫폼 종속적입니다(locale.getencoding() 호출 결과).
- errors: 인코딩 및 디코딩 오류를 처리하는 방식을 지정하는 선택적 문자열로, 바이너리 모드에서는 사용할 수 없습니다. 표준 오류 처리기는 다음과 같습니다:
- 'strict': 인코딩 오류 발생 시 ValueError 예외를 발생(기본값)
- 'ignore': 오류를 무시(데이터 손실 위험 있음)
- 'replace': 잘못된 데이터를 '?'로 대체
- 'surrogateescape': 잘못된 바이트를 낮은 서로게이트 코드 유닛(U+DC80~U+DCFF)으로 나타냄
- 'xmlcharrefreplace': 지원되지 않는 문자를 적절한 XML 문자 참조로 대체
- 'backslashreplace': 잘못된 데이터를 Python의 백슬래시 이스케이프 시퀀스로 대체
- 'namereplace': 지원되지 않는 문자를 \N{...} 이스케이프 시퀀스로 대체
- newline: 스트림에서 줄바꿈 문자를 처리하는 방식을 결정합니다.
- None: 보편적 줄바꿈 모드 활성화(\n, \r, \r\n을 모두 \n으로 변환)
- '': 보편적 줄바꿈 모드 활성화, 하지만 줄바꿈 문자는 변환되지 않음
- '\n', '\r', '\r\n': 입력 줄은 지정된 문자열로만 종료되며 변환되지 않음
- closefd: 파일 디스크립터를 닫을지 여부를 결정합니다. 파일 이름을 지정한 경우 기본값은 True이며, False로 설정하면 오류가 발생합니다.
- opener: 커스텀 오프너를 사용하여 파일 디스크립터를 열기 위한 호출 가능 객체를 지정합니다. 오프너는 (file, flags)를 인자로 받으며, 열려 있는 파일 디스크립터를 반환해야 합니다.
반환되는 파일 객체:
- 텍스트 모드: io.TextIOWrapper의 서브클래스.
- 바이너리 모드: 버퍼링된 경우 io.BufferedReader, io.BufferedWriter, io.BufferedRandom의 서브클래스.
- 버퍼링이 비활성화된 경우: io.RawIOBase의 서브클래스(io.FileIO 포함).
예제:
import os
# 디렉토리 핸들 열기
dir_fd = os.open('somedir', os.O_RDONLY)
def opener(path, flags):
return os.open(path, flags, dir_fd=dir_fd)
with open('spamspam.txt', 'w', opener=opener) as f:
print('This will be written to somedir/spamspam.txt', file=f)
os.close(dir_fd) # 파일 디스크립터 닫기
버전 변경 사항:
- 3.3: opener 매개변수와 'x' 모드 추가. IOError가 OSError의 별칭으로 변경.
- 3.4: 파일이 상속 불가능해짐.
- 3.5: 인터럽트된 시스템 호출이 재시도됨. 'namereplace' 오류 처리기 추가.
- 3.6: os.PathLike 객체를 지원.
- 3.11: 'U' 모드 제거.
이 함수는 플랫폼에 독립적이며 텍스트 파일과 바이너리 파일을 모두 처리할 수 있는 강력한 도구입니다.