2014-11-10 4 views
1

파일을 여는 코드 블록을 가지고 있습니다. for 루프를 실행 한 후 파일을 닫습니다. 이 파일을 해제하지 않는 것 같습니다 그러나파일이 파이썬에서 해제되지 않았습니다.

때문에 다음 루프 아래 라인과 0

print os.stat('/root/message').st_size 

쇼 가깝습니다. 내가 ls -l을하면 파일 크기가 표시되고 cat 파일을 출력 할 수 있으며 올바른 내용을 가지고 있습니다.

다음은 코드 블록입니다.

#!/usr/bin/python 
import os 
objects = { 'dave' : 'builder' , 'fred' : 'cobbler' , 'frank' : 'shoplifter' } 
log = open('/root/jam' , 'w') 
for bloke in objects: 
     log.write("%s is a %s \n" % (bloke, objects[bloke])) 
log.close 
print os.stat('/root/jam').st_size 

내가 뭘 잘못하고 있니?

+2

'log.close()'에 볼 수있다? – fredtantini

답변

6

file.close 방법을 잊어 버렸습니다. 그것을 단지 방법을 참조하지 ()를 추가하지만 실제로 호출 다음 ls -lcat 명령은 당신에게 크기와 파일을 보여 왜

log.close() 

파이썬 그렇지 않으면, 이는 바로 스크립트가 종료로 파일을 자동으로 닫 것이다 내용.

파일 개체를 context manager, using the with statement으로 사용할 수도 있습니다. 즉시 with 블록은 파일이 당신을 위해 폐쇄됩니다 끝으로 :

import os 

objects = { 'dave' : 'builder' , 'fred' : 'cobbler' , 'frank' : 'shoplifter' } 

with open('/root/jam' , 'w') as log: 
    for bloke in objects: 
     log.write("%s is a %s \n" % (bloke, objects[bloke])) 

# with block ends, file is closed for you 

print os.stat('/root/jam').st_size 
+0

물론 완벽하게 작동합니다. 바보 나. 일단 허용되면 대답을 수락합니다. –

0

는 쓰기 모드의 문제가 뭔지 몰라하지만 'R +'를 사용하여 수행 할 수 있습니다.

import os 
objects = { 'dave' : 'builder' , 'fred' : 'cobbler' , 'frank' : 'shoplifter' } 
log = open('jam.txt', 'r+') 
for bloke in objects: 
    log.write("%s is a %s \n" % (bloke, objects[bloke])) 
log.close() 
print os.stat('jam.txt').st_size 

다른 모드는 http://www.tutorialspoint.com/python/python_files_io.htm

+1

OP가 실제로 파일을 닫지 않으면 'r +'을 사용하여 읽기와 쓰기를 수행 할 수 있습니다. 데이터가 파일 버퍼에 그대로 저장됩니다. 게다가''r + ''는 아직 존재하지 않으면 파일을 생성하지 않습니다. –

관련 문제