Python 2.4에서 파일을 안전하게 열고 닫는 방법


87

저는 현재 Python을 사용하는 서버 중 하나에서 사용할 작은 스크립트를 작성하고 있습니다. 서버에는 Python 2.4.4 만 설치되어 있습니다.

2.5가 나올 때까지 Python을 사용하지 않았으므로 다음 형식에 익숙합니다.

with open('file.txt', 'r') as f:
    # do stuff with f

그러나 with2.5 이전 에는 진술 이 없으며 파일 객체를 수동으로 정리하는 적절한 방법에 대한 예제를 찾는 데 어려움이 있습니다.

이전 버전의 Python을 사용할 때 파일 객체를 안전하게 폐기하는 가장 좋은 방법은 무엇입니까?

답변:


140

docs.python.org 참조 :

파일 작업이 끝나면 f.close ()를 호출하여 파일을 닫고 열린 파일이 차지하는 모든 시스템 리소스를 확보합니다. f.close () 호출 후 파일 객체 사용 시도는 자동으로 실패합니다.

따라서 다음 close()과 함께 우아하게 사용하십시오 try/finally.

f = open('file.txt', 'r')

try:
    # do stuff with f
finally:
    f.close()

이렇게하면 # do stuff with f예외가 발생 하더라도 f제대로 닫히게됩니다.

참고 open나타납니다 외부try. 경우 open자체가 예외를 발생, 파일이 오픈되지 않아 폐쇄 할 필요가 없습니다. 또한 open예외가 발생하면 그 결과가 할당 되지 않으며f 를 호출하는 것은 오류 f.close()입니다.


아주 간단합니다. 감사합니다. 어떤 이유로 나는 더 많은 것이 필요하다고 생각했습니다.
TM.

16
경우 open실패하기 전에 예외가 발생합니다 try/finally블록도 입력됩니다. 그래서 close호출되지 않습니다. (당신이 호출해야하는 이유 open전과 try.)
FogleBird

1
@TM open예외 발생 에 대한 메모를 추가했습니다 .
Jon-Eric

4
이것은 with 문이 뒤에서 번역되는 것입니다.
Arlaharen

1
파일 열기는 시도 내에서 발생해야합니다.
안토니 러 틀리지

32

위의 솔루션에서 여기에서 반복됩니다.

f = open('file.txt', 'r')

try:
    # do stuff with f
finally:
   f.close()

파일을 성공적으로 연 후 시도하기 전에 나쁜 일이 발생하면 (알지 못합니다 ...) 파일이 닫히지 않으므로 더 안전한 해결책은 다음과 같습니다.

f = None
try:
    f = open('file.txt', 'r')

    # do stuff with f

finally:
    if f is not None:
       f.close()

with open (...) 문을 사용하면 with 블록이 어떻게 완료 되든 (예외가 있더라도) 파일이 닫힙니다
darkgaze

@darkgaze with open(...)는 확실히 현대 파이썬에서 최고의 선택입니다.
mljrg

11

다음과 함께 사용하는 경우 문서에 따라 파일을 닫을 필요가 없습니다.

파일 객체를 다룰 때 with 키워드를 사용하는 것이 좋습니다. 이는 도중에 예외가 발생하더라도 제품군이 완료된 후 파일이 제대로 닫히는 이점이 있습니다. 또한 동등한 try-finally 블록을 작성하는 것보다 훨씬 짧습니다.

>>> with open('workfile', 'r') as f:
...     read_data = f.read()
>>> f.closed
True

더보기 : https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects


이것은 정확하고 질문에 대한 인식이 없습니다.
Jon-Eric

-4

다음은 사용 방법 open과 "pythonclose

from sys import argv
script,filename=argv
txt=open(filename)
print "filename %r" %(filename)
print txt.read()
txt.close()
print "Change the file name"
file_again=raw_input('>')
print "New file name %r" %(file_again)
txt_again=open(file_again)
print txt_again.read()
txt_again.close()

파일을 몇 번 열 었는지 해당 시간을 닫아야합니다.


1
예외가 이후에 발생하는 경우 open있지만 전에 close파일이 제대로이 방법을 사용하여 닫히지 않습니다. 사용 with또는 try/ finally는 예외가있는 경우에도 파일을 올바르게 닫습니다.
Jon-Eric
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.