2013-02-26 2 views
0

파일은 언제 닫습니까?파이썬 열기 및 메모리 누수

# Read all data from input file 
    mergeData = open("myinput.txt","r") 
    allData = mergeData.read() 
    mergeData.close() 

이 코드를 대체 할 수 있습니까?

allData = read.open("myinput.txt","r") 

언제 파일을 닫을 지 궁금한가요? 명령문이 실행되면 닫힐까요? 또는 프로그램이 종료 될 때까지 대기하십시오.

+1

나는'allData = open ('myinput.txt')을 의미한다고 생각합니다. – Iguananaut

+0

감사합니다. 나는 추측 (초심자) 파이썬 프로그래머이다. – historystamp

답변

4

CPython은 개체가 삭제 될 때 자동으로 파일 개체를 닫습니다. 그것은 참조 카운트가 0이 될 때 삭제됩니다 (더 이상 변수를 참조하지 않습니다). 따라서 함수에 mergeData을 사용하면 함수가 완료 되 자마자 로컬 변수가 정리되고 파일이 닫힙니다.

allData = open("myinput.txt","r").read()을 사용하는 경우 .read()이 반환 될 때 참조 횟수가 0으로 떨어지고 CPython에서 파일이 닫힌다는 의미입니다.

개체 수명이 다르게 관리되는 자이 썬이나 IronPython과 같은 다른 구현에서 개체가 실제로 삭제되는 순간은 훨씬 늦을 수 있습니다.

비록 파일을 사용하는 가장 방법은 컨텍스트 매니저입니다 :

.close() mergeData자동으로를 호출
with open("myinput.txt","r") as mergeData: 
    allData = mergeData.read() 

. file.open() documentation 및 에 대한 설명서를 참조하십시오.

+0

와우, 우리는 똑같은 답변을 동시에 작성했습니다. – Iguananaut

+1

@Iguananaut : * 자주 묻는 질문입니다. 아마 어딘가에 속는 사람이있을 것입니다. –

+0

에서'with open .. filehandle' 파일 핸들은 자동으로 닫힙니다. 그러나 RHEL5.x 및 SLES10.x에서 사용할 수있는 Python 2.4에서는 작동하지 않습니다. – kvivek

2

예. 그래 넌 할수있어. 메모리 누수가 없거나 그런 종류의 것이 없습니다.

open()에 의해 반환 된 file 개체가 범위를 벗어나 가비지 수집 된 직후 파일 핸들이 닫힙니다.

당신은 같은 것을 할 할 수 원하는 경우 비록 : 당신이 그것으로 완료로 파일을 즉시 폐쇄되어 있는지 확인합니다

with open('myinput.txt') as f: 
    data = f.read() 

이 있습니다.