Neo Ground

파이썬의 open(0)는 무엇일까 본문

파이썬

파이썬의 open(0)는 무엇일까

Neo Ground 2024. 5. 6. 00:47

쉬운 요약

open()은 인자로 들어오는 파일을 읽는 함수이다.

open()에 0이 인자로 들어가면 키보드를 통해 입력하는 내용을 읽을 파일로 간주한다.

open(0).read()는 입력 전체를 하나의 문자열로 리턴,

open(0).readline()은 입력을 한 줄씩 리턴,

open(0).readlines()는 입력을 개행(newline)으로 구분해 리스트 형태로 리턴한다.

open(0).readline().strip()은 기능적으로는 input()과 완전히 동일하다고 봐도 된다.

 

구체적 설명

f = open("test.txt")
while True:
    line = f.readline()
    if not line:
        break
    print(line)
f.close()

open(0)를 이해하기 전에 위와 같은 코드를 떠올려 보자.

지극히 일반적인 파일을 읽어 출력하는 코드이다.

open의 인자인 "test.txt"의 경로에 있는 파일을 읽을 수 있도록 한다.

 

그러면 open(0)0이라는 경로의 파일을 읽는다는 말인가...?

틀린말은 아니다. 단, 0이라는 경로가 표준입력이라는 특별한 경로를 의미한다.

 

대부분의(아마 당신이 접할 모든) 운영체제에서 경로 0표준입력을 의미한다.

표준 입력은 파이썬이든 C든 웬만한 언어를 실행했을 때 키보드로 입력을 하는 그런 것을 표준입력이라고 생각하면 된다.

 

따라서 open(0)은 당신이 키보드로 입력하는 내용을 읽어들이고, 평소 파일을 읽을 때 사용하던 open 함수의 용법과 동일한 방법으로 사용할 수 있다.

 

예제

f = open(0)
while True:
    line = f.readline()
    if not line:
        break
    print(line)
f.close()

open 함수의 인자를 제외하면 본 글의 맨 위의 코드와 동일하다.

아무거나 입력하면 입력한 내용을 엔터를 치자마자 그대로 출력한다.

Ctrl+z를 입력 후 엔터를 누르면 종료할 수 있다.

리눅스를 사용한다면 Ctrl+d를 누르면 바로 종료된다.

 

lines = open(0).read()
print(lines)

입력한 내용을 Ctrl+z를 누른 후 한번에 출력한다.

open(0).read()는 EOF 신호가 들어오기 전까지 입력받은 내용을 하나의 문자열로 만들어 리턴함을 알 수 있다.

 

lines = [*open(0)] # == open(0).readlines()
print(lines)

입력한 내용을 개행으로 구분하여 리스트 형태로 출력한다.

open(0).readlines()와 동일하다고 보면 된다.

open(0)은 하나의 iterator로도 사용 가능하며 이는 굳이 open(0)가 아닌 일반적인 파일 입력에서도 마찬가지이다.

이를 응용하면 파일을 읽을 때 위에서의 if not line과 같은 예외처리를 할 필요가 없다.