fileinput — 여러 입력 스트림에서 줄을 이터레이트 하기

소스 코드: Lib/fileinput.py


이 모듈은 표준 입력이나 파일 목록에 대한 루프를 빠르게 작성하기 위한 도우미 클래스와 함수를 구현합니다. 단지 하나의 파일을 읽거나 쓰려면 open()을 참조하십시오.

일반적인 사용법은 다음과 같습니다:

import fileinput
for line in fileinput.input():
    process(line)

이것은 sys.argv[1:]에 나열된 모든 파일의 줄을 이터레이트 하며, 목록이 비어 있으면 기본값은 sys.stdin입니다. 파일 이름이 '-'이면, 이 또한 sys.stdin으로 대체되고 선택적 인자 modeopenhook은 무시됩니다. 대체 파일명 목록을 지정하려면, input()의 첫 번째 인자로 전달하십시오. 단일 파일 이름도 허용됩니다.

모든 파일은 기본적으로 텍스트 모드로 열리지만, input()이나 FileInput을 호출할 때 mode 매개 변수를 지정하여 이를 재정의할 수 있습니다. 파일을 열거나 읽는 동안 I/O 에러가 발생하면, OSError가 발생합니다.

버전 3.3에서 변경: IOError가 발생했었습니다; 이제 이것은 OSError의 별칭입니다.

sys.stdin이 두 번 이상 사용되면, 대화식으로 사용되거나 명시적으로 재설정된 경우(예를 들어, sys.stdin.seek(0)을 사용해서)를 제외하고 두 번째와 그 이후의 사용은 줄을 반환하지 않습니다.

빈 파일은 열리고 즉시 닫힙니다; 파일명 목록에 존재함이 인식되는 유일한 시간은 마지막에 열린 파일이 비어있을 때입니다.

줄은 줄 바꿈이 그대로 유지된 채로 반환됩니다. 즉, 파일의 마지막 줄에는 줄 바꿈이 없을 수도 있습니다.

fileinput.input()이나 FileInput()openhook 매개 변수를 통해 열기 훅을 제공하여 파일을 여는 방법을 제어할 수 있습니다. 훅은 두 개의 인자 filenamemode를 취하고, 그에 따라 열린 파일류 객체를 반환하는 함수여야 합니다. 이 모듈에는 두 가지 유용한 훅이 이미 제공됩니다.

다음 함수는 이 모듈의 기본 인터페이스입니다:

fileinput.input(files=None, inplace=False, backup='', *, mode='r', openhook=None)

FileInput 클래스의 인스턴스를 만듭니다. 인스턴스는 이 모듈의 함수에 대한 전역 상태로 사용되며, 이터레이션 중에 사용하기 위해 반환되기도 합니다. 이 함수의 매개 변수는 FileInput 클래스의 생성자로 전달됩니다.

FileInput 인스턴스는 with 문에서 컨텍스트 관리자로 사용될 수 있습니다. 이 예제에서, 예외가 발생하더라도 with 문이 종료된 후 input이 닫힙니다:

with fileinput.input(files=('spam.txt', 'eggs.txt')) as f:
    for line in f:
        process(line)

버전 3.2에서 변경: 컨텍스트 관리자로 사용할 수 있습니다.

버전 3.8에서 변경: 키워드 매개 변수 modeopenhook은 이제 키워드 전용입니다.

다음 함수는 fileinput.input()에 의해 만들어진 전역 상태를 사용합니다; 활성 상태가 없으면, RuntimeError가 발생합니다.

fileinput.filename()

현재 읽고 있는 파일의 이름을 반환합니다. 첫 번째 줄을 읽기 전에는, None을 반환합니다.

fileinput.fileno()

현재 파일의 정수 《파일 기술자》를 반환합니다. 파일이 열리지 않았으면 (첫 번째 줄 전과 파일 사이에), -1을 반환합니다.

fileinput.lineno()

방금 읽은 줄의 누적 줄 번호를 반환합니다. 첫 번째 줄을 읽기 전에는, 0을 반환합니다. 마지막 파일의 마지막 줄을 읽은 후에는, 그 줄의 줄 번호를 반환합니다.

fileinput.filelineno()

현재 파일의 줄 번호를 반환합니다. 첫 번째 줄을 읽기 전에는, 0을 반환합니다. 마지막 파일의 마지막 줄을 읽은 후에는, 그 줄의 파일 내에서의 줄 번호를 반환합니다.

fileinput.isfirstline()

방금 읽은 줄이 파일의 첫 번째 줄이면 True를, 그렇지 않으면 False를 반환합니다.

fileinput.isstdin()

마지막 줄을 sys.stdin에서 읽었으면 True를, 그렇지 않으면 False를 반환합니다.

fileinput.nextfile()

다음 이터레이션에서 다음 파일(있다면)의 첫 번째 줄을 읽도록 현재 파일을 닫습니다; 파일에서 읽지 않은 줄은 누적 줄 수에 포함되지 않습니다. 파일명은 다음 파일의 첫 번째 줄을 읽을 때까지 변경되지 않습니다. 첫 번째 줄을 읽기 전에는, 이 함수가 효과가 없습니다; 첫 번째 파일을 건너뛰는 데 사용할 수 없습니다. 마지막 파일의 마지막 줄을 읽은 후에는, 이 함수는 효과가 없습니다.

fileinput.close()

시퀀스를 닫습니다.

모듈이 제공하는 시퀀스 동작을 구현하는 클래스는 서브 클래싱에도 사용할 수 있습니다:

class fileinput.FileInput(files=None, inplace=False, backup='', *, mode='r', openhook=None)

FileInput 클래스는 구현입니다; 그 메서드 filename(), fileno(), lineno(), filelineno(), isfirstline(), isstdin(), nextfile()close()는 모듈에 있는 같은 이름의 함수에 해당합니다. 또한 다음 입력 줄을 반환하는 readline() 메서드와 시퀀스 동작을 구현하는 __getitem__() 메서드가 있습니다. 시퀀스는 엄격하게 순차적으로 액세스해야 합니다; 무작위 액세스와 readline()은 혼합될 수 없습니다.

modeopen()에 전달할 파일 모드를 지정할 수 있습니다. 'r', 'rU', 'U''rb' 중 하나여야 합니다.

openhook이 제공되면 두 개의 인자 filenamemode를 취하고, 이에 따라 열린 파일류 객체를 반환하는 함수여야 합니다. inplaceopenhook을 함께 사용할 수 없습니다.

FileInput 인스턴스는 with 문에서 컨텍스트 관리자로 사용될 수 있습니다. 이 예제에서, 예외가 발생하더라도 with 문이 종료된 후 input이 닫힙니다:

with FileInput(files=('spam.txt', 'eggs.txt')) as input:
    process(input)

버전 3.2에서 변경: 컨텍스트 관리자로 사용할 수 있습니다.

버전 3.4부터 폐지: 'rU''U' 모드.

버전 3.8부터 폐지: __getitem__() 메서드에 대한 지원은 폐지되었습니다.

버전 3.8에서 변경: 키워드 매개 변수 modeopenhook은 이제 키워드 전용입니다.

선택적 제자리 필터링(in-place filtering): 키워드 인자 inplace=Truefileinput.input()이나 FileInput 생성자로 전달되면, 파일이 백업 파일로 이동되고 표준 출력은 입력 파일로 보내집니다 (백업 파일과 같은 이름의 파일이 이미 있으면, 조용히 대체됩니다). 이를 통해 입력 파일을 다시 쓰는 필터를 작성할 수 있습니다. backup 매개 변수가 제공되면 (일반적으로 backup='.<some extension>'으로), 백업 파일의 확장자를 지정하고, 백업 파일은 그대로 남아 있습니다; 기본적으로 확장자는 '.bak'이고, 출력 파일을 닫을 때 삭제됩니다. 표준 입력을 읽을 때는 제자리 필터링이 비활성화됩니다.

이 모듈은 다음과 같은 두 개의 열기 훅을 제공합니다:

fileinput.hook_compressed(filename, mode)

gzipbz2 모듈을 사용하여 gzip과 bzip2로 압축된 파일(확장자 '.gz''.bz2'로 인식합니다)을 투명하게 엽니다. 파일명 확장자가 '.gz''.bz2'가 아니면, 파일이 정상적으로 열립니다 (즉, 압축 해제 없이 open()을 사용합니다).

사용 예: fi = fileinput.FileInput(openhook=fileinput.hook_compressed)

fileinput.hook_encoded(encoding, errors=None)

주어진 encodingerrors를 사용하여 파일을 읽도록 open()으로 각 파일을 여는 훅을 반환합니다.

사용 예: fi = fileinput.FileInput(openhook=fileinput.hook_encoded("utf-8", "surrogateescape"))

버전 3.6에서 변경: 선택적 errors 매개 변수를 추가했습니다.