Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 파일을 열 때 버퍼 크기를 지정하는 방법

Python에서 파일을 열 때 버퍼 크기 지정하기

Python에서 파일을 열 때 버퍼(buffer) 크기를 직접 지정하려면 내장 함수 open()의 세 번째 인자인 buffering 매개변수를 사용하면 됩니다. 이 값에 따라 파일 입출력 성능과 동작 방식이 달라질 수 있습니다.

Python 2에서의 버퍼링 지정

Python 2의 open() 함수 정의는 다음과 같습니다.

open(name[, mode[, buffering]])

세 번째 인자인 buffering은 파일에 적용할 원하는 버퍼 크기를 지정하는 선택적 인자입니다.

  • 0: 버퍼링 없음(unbuffered)
  • 1: 라인 단위 버퍼링(line buffered)
  • 양수: 해당 값(바이트)을 크기로 하는 버퍼 사용
  • 음수: 시스템 기본값 사용 (tty 장치는 라인 버퍼링, 그 외 파일은 전체 버퍼링)

이 인자를 생략하면 시스템 기본값이 적용됩니다.

예를 들어, 버퍼 크기가 128바이트인 파일을 열고 싶다면 다음과 같이 작성합니다.

>>> open('my_file', 'r+', 128)

Python 3에서의 버퍼링 지정

Python 3에서 open() 함수의 정의는 다음과 같습니다.

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

buffering은 버퍼링 정책을 설정하는 선택적 정수 인자입니다.

  • 0: 버퍼링 비활성화 (바이너리 모드에서만 허용)
  • 1: 라인 버퍼링 선택 (텍스트 모드에서만 사용 가능)
  • 1보다 큰 정수: 고정 크기 청크(chunk) 버퍼의 바이트 크기 지정

buffering 인자를 지정하지 않으면 기본 버퍼링 정책이 다음과 같이 동작합니다.

  • 바이너리 파일은 고정 크기 청크 단위로 버퍼링됩니다. 버퍼 크기는 하위 장치의 "블록 크기(block size)"를 추정하는 휴리스틱으로 결정되며, 판단할 수 없는 경우 io.DEFAULT_BUFFER_SIZE로 대체됩니다.
  • "대화형(interactive)" 텍스트 파일(isatty()True를 반환하는 파일)는 라인 버퍼링을 사용하고, 그 외의 일반 텍스트 파일은 위의 바이너리 파일과 동일한 정책을 따릅니다.

사용 예시는 Python 2와 동일합니다. 예를 들어, 버퍼 크기가 128바이트인 파일을 열려면 다음과 같이 작성합니다.

>>> open('my_file', 'r+', 128)