2013-07-01 3 views
4

내가 수행 한 경우 다음파일을 초기화하지 않은 경우 어떻게 닫습니까?

import codecs 
lines = codecs.open(somefile, 'r','utf8').readlines() 

내가 초기화되지 한 파일을 닫습니다 수있는 방법이 있습니까? 그렇다면 어떻게? 일반적으로는, 나는 할 수 있었다 : 참조 카운트가 0으로 떨어지면

import codecs 
reader = codecs.open(somefile, 'r','utf8') 
lines = reader.readlines() 
reader.close() 
+1

"초기화 됨"은 이상한 단어입니다. 변수가없는 파일을 닫는 방법이 있습니까? 아닙니다. 그러나 Martijn이 지적했듯이 적어도 프로그램이 종료 될 때 자체적으로 폐쇄되는 경향이 있습니다. –

답변

6

으로 CPython에서 파일 객체를 잘 작성 후 .readlines() 반환되는 자체에 닫습니다. 다른 파이썬 구현에서는 사용 된 가비지 콜렉션 알고리즘에 따라 조금 더 오래 걸릴 수 있습니다. 이 파일은 프로그램 종료보다 늦지 않게 닫힐 것입니다.

당신은 정말 컨텍스트 관리자로 파일 객체를 사용하고에 가까운 with 문 호출이 있어야합니다 즉시 with 문 종료 (아래에 들여 쓰기 코드의 블록으로

with codecs.open(somefile, 'r','utf8') as reader: 
    lines = reader.readlines() 

를 함께 할 예외, return, continue 또는 break 문 또는 블록의 모든 코드가 실행을 완료했기 때문에 reader 파일 객체가 닫힙니다.

보너스 팁 : 파일 개체를 반복 가능 객체, 그래서 다음은 작동합니다 동일한 결과에 대한

with codecs.open(somefile, 'r','utf8') as reader: 
    lines = list(reader) 

.

+0

CPython Python입니까? – alvas

+3

@ 2er0 : CPython은 python.org에서 다운로드 한 Python의 기본 구현입니다. 인터프리터 자체는 Jython (Java), IronPython (C#) 및 PyPy (Python의 하위 집합)와 달리 C로 구현되기 때문에 그렇게 불린다. –

관련 문제