fileinput — 여러 입력 스트림의 줄에 걸쳐 반복

fileinput — 여러 입력 스트림의 줄에 걸쳐 반복

이 모듈은 표준 입력이나 파일 리스트에 대한 루프를 빠르게 작성하는 헬퍼 클래스와 함수를 구현합니다. 단일 파일만 읽거나 쓰려면 open()을 보세요.

출처: Python documentation

본문

전형적인 사용법:

import fileinput
for line in fileinput.input(encoding="utf-8"):
    process(line)

이것은 sys.argv[1:]에 나열된 모든 파일의 줄에 걸쳐 반복하며, 리스트가 비어 있으면 sys.stdin으로 기본 설정됩니다. 파일 이름이 '-'이면 sys.stdin으로 대체되고 선택적 인자 modeopenhook은 무시됩니다. 대체 파일 이름 리스트를 지정하려면 input()의 첫 번째 인자로 전달합니다. 단일 파일 이름도 허용됩니다.

모든 파일은 기본적으로 텍스트 모드로 열리지만 input()이나 FileInput 호출에서 mode 매개변수를 지정해 덮어쓸 수 있습니다. 파일을 열거나 읽는 동안 I/O 오류가 발생하면 OSError가 발생합니다. sys.stdin이 두 번 이상 사용되면 두 번째 이후 사용은 줄을 반환하지 않습니다. 빈 파일은 열리고 즉시 닫힙니다. 줄은 개행을 보존한 채 반환되므로 파일의 마지막 줄에는 개행이 없을 수 있습니다.

openhook 매개변수로 파일을 여는 방식을 제어할 수 있습니다. 훅은 두 인자 filenamemode를 받아 그에 맞게 열린 파일류 객체를 반환하는 함수여야 합니다. encoding이나 errors가 지정되면 추가 키워드 인자로 훅에 전달됩니다. 이 모듈은 압축 파일을 지원하는 hook_compressed()를 제공합니다.

주요 인터페이스

fileinput.input(files=None, inplace=False, backup='', *, mode='r', openhook=None, encoding=None, errors=None)FileInput 클래스의 인스턴스를 만듭니다. 인스턴스는 이 모듈 함수들의 전역 상태로 사용되며 반복 중에도 반환됩니다. FileInput 인스턴스는 with 문에서 컨텍스트 매니저로 사용할 수 있으며, 예외가 발생해도 with 블록을 나가면 닫힙니다:

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

fileinput.input()이 만든 전역 상태를 사용하는 함수들(활성 상태가 없으면 RuntimeError 발생):

  • fileinput.filename() — 현재 읽고 있는 파일의 이름을 반환합니다. 첫 줄을 읽기 전에는 None.
  • fileinput.fileno() — 현재 파일의 정수 "파일 디스크립터"를 반환합니다. 파일이 열리지 않았으면 -1.
  • fileinput.lineno() — 방금 읽은 줄의 누적 줄 번호를 반환합니다. 첫 줄 전에는 0.
  • fileinput.filelineno() — 현재 파일의 줄 번호를 반환합니다.
  • fileinput.isfirstline() — 방금 읽은 줄이 파일의 첫 줄이면 True.
  • fileinput.isstdin() — 마지막 줄이 sys.stdin에서 읽었으면 True.
  • fileinput.nextfile() — 현재 파일을 닫아 다음 반복이 다음 파일의 첫 줄을 읽게 합니다.
  • fileinput.close() — 시퀀스를 닫습니다.

FileInput 클래스

class fileinput.FileInput(files=None, inplace=False, backup='', *, mode='r', openhook=None, encoding=None, errors=None) — 이 클래스는 구현이며, 그 메서드(filename(), fileno(), lineno(), filelineno(), isfirstline(), isstdin(), nextfile(), close())는 같은 이름의 모듈 함수에 대응합니다. 또한 이터러블이며 다음 입력 줄을 반환하는 readline() 메서드가 있습니다. 시퀀스는 엄격히 순차적으로 접근해야 하며 임의 접근과 readline()은 섞을 수 없습니다.

modeopen()에 전달할 파일 모드를 지정할 수 있으며, 'r''rb' 중 하나여야 합니다. inplaceopenhook은 함께 사용할 수 없습니다. encodingerrorsopen()이나 openhook에 전달됩니다.

선택적 in-place 필터링: inplace=True 키워드 인자로 파일을 제자리에서 필터링할 수 있습니다.

  • fileinput.hook_compressed(filename, mode)'.gz''.bz2' 확장자로 인식되는 gzip과 bzip2로 압축된 파일을 gzipbz2 모듈을 사용해 투명하게 엽니다. 확장자가 해당하지 않으면 파일을 평범하게 엽니다.
  • fileinput.hook_encoded(encoding, errors=None) — 주어진 encodingerrors로 각 파일을 open()으로 여는 훅을 반환합니다. fileinput.input()FileInputencodingerrors 매개변수가 생겼으므로 3.10부터 이 함수는 더 이상 사용되지 않습니다(폐지됨).

더 알아보기 (Learn more)