Python-파일 대 사용시기


138

파이썬 fileopen파이썬 의 차이점은 무엇입니까 ? 언제 어느 것을 사용해야합니까? (내가 2.5에 있다고 말해봐)

답변:


153

항상을 사용해야 open()합니다.

현상태대로 문서의 상태 :

파일을 열 때이 생성자를 직접 호출하는 대신 open ()을 사용하는 것이 좋습니다. 파일은 형식 테스트에 더 적합합니다 (예 : "isinstance (f, file)"작성).

또한 Python 3.0부터 file() 제거되었습니다 .


23
"file () 생성자는 Python 2.2의 새로운 기능입니다. 이전 철자 open ()은 호환성을 위해 유지되며 file ()의 별칭입니다." 10 년 전에 RTFM을 결정하고 타입과 클래스의 통합을 매우 좋아했기 때문에 open ()을 다시는 사용하지 않았습니다. 또한, 여전히 타입 생성자가 경로 arg에 의해 위치되고 arg 모드에서 요청 된 것처럼 동작하는 객체와 같은 파일을 반환하는 더 확실한 방법이라고 생각합니다. 나는 당시 개발자의 명백한 의도가 open4compat를 유지했을 때 특히이 방법을 느낍니다.
umeboshi

32

두 가지 이유 : "한 가지 방법이 있어야한다"는 파이썬 철학은 file사라지고있다.

file실제 유형입니다 (예 : file('myfile.txt')생성자 호출). open파일 객체를 반환하는 팩토리 함수입니다.

파이썬 3.0에서는 file내장 된 io라이브러리 에서 라이브러리의 여러 클래스로 구현되는 것으로 이동할 것 입니다 (버퍼 리더 등이있는 Java와 비슷 함).


3
두 가지 이유가 무엇입니까?
Matt

19

file()int 또는 목록과 같은 유형입니다. open()파일을 여는 함수이며 file객체 를 반환 합니다.

다음은 open을 사용해야하는 경우의 예입니다.

f = open(filename, 'r')
for line in f:
    process(line)
f.close()

다음은 파일을 사용해야 할 때의 예입니다.

class LoggingFile(file):
    def write(self, data):
        sys.stderr.write("Wrote %d bytes\n" % len(data))
        super(LoggingFile, self).write(data)

보시다시피, 둘 다 존재해야 할 충분한 이유가 있고 둘 다에 대한 명확한 사용 사례가 있습니다.


5
일반적으로 파일은 with명령문 으로 열어야 합니다. with open(filename, 'r') as f: \ for line in f: \ process(line). 이것은 명시적인 닫기를 피합니다. Python 2.6 이상에서는 기본적으로이 with문장을 지원합니다 . Python 2.5에서는 from __future__ import with_statement코드 맨 위에 추가해야합니다 .
IceArdor

두 번째 예에서 내장 이름을 다시 정의하지 않았습니까?
planetp

1
두 번째 예제 인 @planetp는 파일 클래스에서 상속됩니다. 나는 그것이 소문자 인 것이 이상하다고 생각하지만 그것이 기본 내장 유형 (예 : 객체, str, 목록 등)과 같은 방법입니다
yoniLavi

1
Python 2.5에서 file클래스에는 파일을 with명령문을 통해 열 때마다 자동으로 호출되는 특수 메소드가 장착되었습니다 . 이러한 특수한 방법을 사용하면 파일을 올 바르고 안전하게 열고 닫을 수 있습니다.
Mausy5043

7

기능적으로는 두 가지가 동일합니다. 어쨌든 open전화 할 file것이므로 현재 차이점은 스타일의 문제입니다. 파이썬 문서를 사용하는 것이 좋습니다 open.

파일을 열 때 파일 생성자를 직접 호출하는 대신 open ()을 사용하는 것이 좋습니다.

그 이유는 이후 버전에서 그것들이 동일하다고 보장하지 않기 때문입니다 ( open출고 경로에 따라 다른 유형의 객체를 반환하는 팩토리 함수가 될 것입니다).


2
open은 이미 팩토리 함수이므로 기능상의 차이 (예 : 상속, isinstance () 등)가 있습니다.
Brian

4

파일을 열 때만 open ()을 사용하십시오. file ()은 실제로 3.0에서 제거되고 있으며 현재 더 이상 사용되지 않습니다. 그들은 일종의 이상한 관계를 가지고 있지만, file ()은 지금 가고 있으므로 더 이상 걱정할 필요가 없습니다.

다음은 Python 2.6 문서에서 가져온 것입니다. [브래킷 재료]가 추가했습니다.

파일을 열 때이 [file ()] 생성자를 직접 호출하는 대신 open ()을 사용하는 것이 좋습니다. 파일은 형식 테스트에 더 적합합니다 (예 : isinstance (f, file) 작성).


2

Van Rossum에 따르면 open ()은 현재 file ()의 별칭이지만 나중에 변경 될 수 있으므로 open ()을 사용해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.