파이썬에서`open ()`으로 파일을 연 후 파일을 닫을 수 있습니까? [닫은]


9

이전 질문 과 관련 하여 open()함수 를 사용한 두 가지 답변 모두 파일을 닫는 것에 대한 언급이 없다는 것을 알았습니다 .

나는 그것을하는 것이 좋은 습관이라는 것을 읽었지만 실제로 그것을 필요로합니까? 불필요한 코드입니까?

파일이 자동으로 닫히나요?


1
with open (file_name, ...) as variable:close()이 코드 블록을 떠나 자마자 자동으로 메소드를 호출합니다 .
바이트 사령관


@ByteCommander이 질문을 '해결'하기 위해 귀하의 의견을 답변으로 보내시겠습니까?
TellMeWhy

1
에서 python3, 파일은 더 이상 참조가 없습니다되면 자동으로 garbaged됩니다.
Jacob Vlijm

4
우분투에서 스크립팅과 관련이없는 Python에 대한 일반적인 질문이기 때문에이 질문을 주 제외로 닫으려고합니다. 프로그래밍 언어로 모범 사례를 요구하고 있습니다.
terdon

답변:


9

파일은 언제 닫히나요?

우리가 배울 수있는 것처럼 명시 적으로 파일을 닫는 것이 중요합니까? (StackOverflow) , Python 인터프리터는 다음과 같은 경우 파일을 닫습니다.

  • 블록 을 남겨두면 명시 적으로 또는 암시 적으로 객체 의 close()메소드 를 수동으로 호출 할 수 있습니다 . 이것은 물론 모든 파이썬 구현에서 항상 작동합니다.filewith open(...):
  • file개체의 마지막 참조가 제거되었다 따라서 객체는 가비지 콜렉터에 의해 처리됩니다. 이것은 언어 기능이 아니라 CPython 구현의 특별한 기능이므로 이식성을 위해 이것에 의존하지 마십시오!
  • 파이썬 인터프리터가 종료됩니다. 이 경우에는 한다 열려있어 모든 파일 핸들을 닫습니다. 일부 이전 버전의 Python3은 수동으로 직접 닫아야한다는 경고를 인쇄했습니다. 그러나 충돌을 생각하거나 파이썬 인터프리터를 강제 종료하면 이것이 신뢰할 수 없음을 알 수 있습니다.

따라서 첫 번째 (수동) 방법 만 신뢰할 수 있습니다!

파일이 열린 상태로 유지되면 어떻게됩니까?

먼저, 파이썬 인터프리터의 구현에 따라, 쓰기 액세스 권한이있는 파일을 연 경우 수동으로 유도하거나 파일 핸들러가 닫힐 때까지 수정 사항이 디스크로 플러시되는지 확신 할 수 없습니다.

둘째, 사용자 당 시스템에서 제한된 수의 파일 만 열 수 있습니다. 예를 들어 파이썬 프로그램에서 많은 파일을 가능한 빨리 닫지 않고 루프에서 열어서이 제한을 초과하면 시스템이 더 많은 파일 핸들을 열지 못하게되어 예외가 발생합니다. 프로그램이 마지막으로 허용 된 열린 파일을 가져 오면 다른 프로그램이 거부되어 실패 할 수도 있습니다.

셋째, 이동식 장치에서 파일을 열면 마운트가 해제되거나 꺼내지지 않습니다. 당신은 여전히 같은 일부 파일 시스템에서 파일을 삭제할 수 있습니다 ext4단순히 파일의 아이 노드에 파일 기술자 / 하드 링크가 연결되지 않은 / 제거됩니다 있지만 파일을 연 프로그램은 여전히 자신의 임시 파일 핸들러를 통해 아이 노드에 액세스 할 수 있습니다. 예를 들어, 해당 소프트웨어가 실행되는 동안 패키지를 업데이트 할 수있는 메커니즘이기도합니다. 그러나 예를 들어 NTFS에는 그러한 기능이 없습니다. 그러나 두 개의 동시 프로세스로 수정되지 않을 수도 있으므로 다른 프로세스에서는 여전히 차단됩니다.


python3에 대해서는 완전히 사실이 아닙니다!
Jacob Vlijm

@JacobVlijm 설명해 주시겠습니까?
바이트 사령관

질문 아래의 의견을 참조하십시오. 귀하의 답변 링크에있는 "모범 사례가 아닙니다"에 대한 답변은 2011 년입니다. 만약 존재했다면, 경고는 python3더 이상 존재하지 않으며 답변은 구식입니다. 자동 가비지 콜렉션은 이유로 존재하며 완벽하게 작동합니다. 제가 구체적으로 사용한 지 몇 년 이 지났 습니다close() . 결코 이제까지 그것을 사용하지 않음으로써 발생하는 하나의 오류로 실행되지 않습니다.
Jacob Vlijm

Soo ... PyPy, Jython 또는 IronPython과 같은 다른 구현이 CPython과 같은 방식으로 파일을 닫는 지 여부를 알고 있습니까? 그리고 내가 인터프리터를 죽였다면 파일을 닫을 기회가 없을 것입니다. 또한 열린 파일 제한이 여전히 적용된다고 생각합니다. 작성된 데이터를 비우는 것은 어떻습니까? 최신 정보가 있습니까?
바이트 사령관

1
@JacobVlijm 팁 주셔서 감사합니다. : P 파일을 생성하는 동안 내 컴퓨터가 이미 다운되었습니다 ... 파이썬이 필요하지 않았습니다.
바이트 사령관
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.