2014-04-09 39 views
1

我使用f = open('file.txt', 'w')創建了一個新的文本文件。然後,當我開始寫東西時,有一個問題,我需要退出而不寫任何東西。不保存空文件

但是,該文件仍然被創建,但是爲空。有沒有辦法讓文件不被保存以免寫入文件?或者如果出現錯誤,我是否必須明確地刪除文件?

+0

的可能重複[刪除日誌文件,如果它後被關閉是空的(http://stackoverflow.com/questions/21028526/delete-log-file-if-it-is-empty-after-被關閉) – mhlester

+0

鏈接的複製中的答案與我在這裏給出的答案完全相同,即使此問題不是專門關於保存日誌文件的, – mhlester

+0

好吧,我該如何關閉它,因爲解決方案可以在別處找到? – user2066480

回答

1

您可以使用atexit來模擬這種行爲,但在某處可能有更好的方法。

import atexit 

def safety_trigger(): 
    try: 
     os.remove(FILENAME) 
    except FileNotFoundError: 
     pass 

atexit.register(safety_trigger) 

with open(FILENAME,'w') as f: 
    # do your 
    # file operations 
    atexit.unregister(safety_trigger) 

這樣,當你的腳本開始,你把它當它結束時自動刪除FILENAME。完成寫入文件後,請告訴腳本不要在結束時自動刪除FILENAME

+1

+1,從而提出對現有代碼進行最小更改的解決方案。這對我來說似乎比使用包裝類或將輸出存儲在字符串中更優雅。 – Max

0

您可以簡單地準備好寫作信息,並且只執行保存操作,如果通過準備就可以順利完成。

info_to_write = "" 
try: 

    info_to_write += "something!" 
    # etc... 

    if something_went_wrong: 
     raise Exception 
    with open("file.txt","w") as f: 
     f.write(info_to_write) 
catch: 
    print "Nothing written, no file created"