2011-05-12 64 views
12

我對Python相當陌生,所以希望我在這裏錯過了一些明顯的東西,但它讓我難以置信。我的程序片段如下:.write不能在Python中工作

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

輸出打印正確的控制檯,但如果我打開文件它是空白的。如果我刪除該文件並再次執行我的程序,則會創建該文件,但仍爲空。我在之前的另一個程序中使用了完全相同的代碼塊,它工作並仍然有效。然而,如果我打開Python並嘗試一些簡單的東西,例如:

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

再次,test.txt被創建,但留空。是什麼賦予了?

+0

打印輸出時返回什麼?你測試了outFile.write('test')嗎? – garnertb 2011-05-12 01:06:44

回答

30

你在程序結束時做了f.close()嗎?

+0

oops ...添加關閉()並且正常工作 – Danny 2011-05-12 01:31:25

+2

當解釋器退出時,文件不是'.close()'自己嗎? – dcrosta 2011-05-12 01:39:57

+1

當Python存在時文件關閉,但文件輸出通常被緩衝,如果沒有換行符,則掛起的輸出不會被刷新到文件系統。 – poke 2016-09-12 14:14:50

32

由於緩衝,字符串可能實際上不會顯示在文件中,直到您撥打flush()close()。因此,請在f.write()之後撥打f.close()。建議使用帶有文件對象的with,即使由於例外情況或return聲明而提早跳出with塊,它也會自動關閉文件。

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

儘量附上語句在try/catch塊知道是否打開或寫入文件時發生什麼事:

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) 

並始終關閉您的文件,以便系統能刷新數據在關閉之前將文件添加到文件

8

,如果你想緩衝的內容寫入到磁盤你需要做一個

outFile.flush() 

。 如果您已完成寫入文件,則file.close調用將在關閉文件之前隱式刷新緩衝的數據。

-1

也許你應該使用絕對路徑而不是相對路徑。