fileinput — 여러 입력 스트림의 줄에 걸쳐 반복
fileinput — 여러 입력 스트림의 줄에 걸쳐 반복
이 모듈은 표준 입력이나 파일 리스트에 대한 루프를 빠르게 작성하는 헬퍼 클래스와 함수를 구현합니다. 단일 파일만 읽거나 쓰려면 open()을 보세요.
본문
전형적인 사용법:
import fileinput
for line in fileinput.input(encoding="utf-8"):
process(line)
이것은 sys.argv[1:]에 나열된 모든 파일의 줄에 걸쳐 반복하며, 리스트가 비어 있으면 sys.stdin으로 기본 설정됩니다. 파일 이름이 '-'이면 sys.stdin으로 대체되고 선택적 인자 mode와 openhook은 무시됩니다. 대체 파일 이름 리스트를 지정하려면 input()의 첫 번째 인자로 전달합니다. 단일 파일 이름도 허용됩니다.
모든 파일은 기본적으로 텍스트 모드로 열리지만 input()이나 FileInput 호출에서 mode 매개변수를 지정해 덮어쓸 수 있습니다. 파일을 열거나 읽는 동안 I/O 오류가 발생하면 OSError가 발생합니다. sys.stdin이 두 번 이상 사용되면 두 번째 이후 사용은 줄을 반환하지 않습니다. 빈 파일은 열리고 즉시 닫힙니다. 줄은 개행을 보존한 채 반환되므로 파일의 마지막 줄에는 개행이 없을 수 있습니다.
openhook 매개변수로 파일을 여는 방식을 제어할 수 있습니다. 훅은 두 인자 filename과 mode를 받아 그에 맞게 열린 파일류 객체를 반환하는 함수여야 합니다. 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()은 섞을 수 없습니다.
mode로 open()에 전달할 파일 모드를 지정할 수 있으며, 'r'과 'rb' 중 하나여야 합니다. inplace와 openhook은 함께 사용할 수 없습니다. encoding과 errors는 open()이나 openhook에 전달됩니다.
선택적 in-place 필터링: inplace=True 키워드 인자로 파일을 제자리에서 필터링할 수 있습니다.
훅
fileinput.hook_compressed(filename, mode)—'.gz'와'.bz2'확장자로 인식되는 gzip과 bzip2로 압축된 파일을gzip및bz2모듈을 사용해 투명하게 엽니다. 확장자가 해당하지 않으면 파일을 평범하게 엽니다.fileinput.hook_encoded(encoding, errors=None)— 주어진encoding과errors로 각 파일을open()으로 여는 훅을 반환합니다.fileinput.input()과FileInput에encoding과errors매개변수가 생겼으므로 3.10부터 이 함수는 더 이상 사용되지 않습니다(폐지됨).