2011-05-12 8 views
12

저는 파이썬을 처음 접했기 때문에 여기서 분명히 뭔가 분명한 것을 놓치고 싶지만 저에게는 저주가 있습니다. 내 프로그램의 스 니펫은 다음과 같습니다.. 파이썬에서 작동하지 않습니다.

outFile = open('P4Output.txt', 'w') 
outFile.write(output) 
print output 
print "Output saved to \"P4Output.txt\"\n" 

출력이 콘솔에 올바르게 인쇄되지만 파일을 열면 비어 있습니다. 파일을 삭제하고 프로그램을 다시 실행하면 파일이 만들어 지지만 여전히 비어 있습니다. 이전에 다른 프로그램에서 이와 똑같은 코드 블록을 사용 했었지만 여전히 작동했습니다. 그러나 파이썬을 열고 다음과 같은 간단한 것을 시도해 보면 :

f = open('test.txt', 'w') 
f.write("test") 

다시 말하면 test.txt가 생성되지만 공백으로 남습니다. 뭐라 구요?

+0

출력물을 출력 할 때 반환되는 것은 무엇입니까? 당신은 outFile.write ('test')를 테스트 했습니까? – garnertb

답변

30

프로그램 끝에서 f.close()을 했습니까?

+0

oops ... close()를 추가하면 잘 작동합니다. – Danny

+2

인터프리터가 종료 될 때'.close()'파일 자체가 아닌 파일을 실행합니까? – dcrosta

+1

파일은 파이썬이 존재할 때 닫히지 만 파일 출력은 보통 버퍼링되며 개행 문자가 없으면 보류중인 출력은 파일 시스템으로 플러시되지 않습니다. – poke

32

버퍼링 때문에 flush() 또는 close()을 호출하기 전에는 문자열이 실제로 파일에 표시되지 않을 수 있습니다. 따라서 f.close()f.write() 후에 연락하십시오. 또한 파일 개체에 with을 사용하는 것이 좋습니다. 예외 또는 return 문으로 인해 일찍 with 블록에서 벗어난 경우에도 자동으로 파일을 닫습니다. 시스템이 데이터를 플러시 할 수 있습니다

try: 
    outFile = open('P4Output.txt','w') 
    outFile.write(output) 
    outFile.close() 
except IOError as (errno,strerror): 
    print "I/O error({0}): {1}".format(errno, strerror) 

그리고 항상 파일을 닫습니다

with open('P4Output.txt', 'w') as f: 
    f.write(output) 
2

봅니다 뭔가 파일을 열거 나 작성하는 동안 발생하는 경우 알고 try/catch 블록에서 문을 묶어야합니다 파일을 닫기 전에 당신은 버퍼 내용을 디스크에 기록 할 경우

8

당신은

outFile.flush() 

할 필요가있다. 파일에 대한 쓰기가 완료되면 file.close 호출은 파일을 닫기 전에 암시 적으로 버퍼링 된 데이터를 플러시합니다.

-1

어쩌면 상대 경로 대신 절대 경로를 사용해야합니다.

관련 문제