2016-03-05 43 views
0

通常寫一個文件,我將做到以下幾點:使用「with open()as file」方法,如何多次寫入?

the_file = open("somefile.txt","wb") 
the_file.write("telperion") 

但出於某種原因,IPython中(Jupyter)不是寫文件。這是很奇怪,但我可以得到它的工作的唯一辦法是,如果我這樣寫:

with open('somefile.txt', "wb") as the_file: 
    the_file.write("durin's day\n") 

with open('somefile.txt', "wb") as the_file: 
    the_file.write("legolas\n") 

但很明顯,這將重新創建該文件的對象,並重寫。

爲什麼第一個程序段中的代碼不起作用?我怎麼能讓第二塊工作?

+0

以「w」模式打開文件會刪除文件中的所有數據(如果存在)。 –

+0

嘗試:'the_file = open(「somefile.txt」,「wb」,buffering = False)'。 –

+0

讓我們回到您原來的寫作。寫入數據會被緩存,直到您寫入數據塊或關閉文件。所以你可能還沒有看到磁盤上的數據。 – tdelaney

回答

5

w標誌表示「打開以寫入和截斷文件」;你可能想用a標誌打開文件,這意味着「打開文件以進行追加」。

此外,它似乎是你使用Python 2.你不應該使用b標誌,除非你在編寫二進制文件而不是純文本內容。在Python 3中,你的代碼會產生一個錯誤。

因此:

with open('somefile.txt', 'a') as the_file: 
    the_file.write("durin's day\n") 

with open('somefile.txt', 'a') as the_file: 
    the_file.write("legolas\n") 

作爲使用filehandle = open('file', 'w')在文件中的輸入沒有顯示,這是因爲該文件輸出進行緩衝 - 僅一個更大的塊在時間寫入。爲確保文件在單元末尾被刷新,可以使用filehandle.flush()作爲最後一條語句。

+0

我想我感到困惑的部分是我將這個文件對象傳遞給不同的函數,所以我將它聲明爲一個變量。如果我創建了文件w/var = open(「file」,「w」)',那麼以後如何追加到該變量? –

+0

@ O.rka:關於文件中的緩衝:'with'語句創建一個上下文管理器,負責在最後調用'the_file.close()'並因此將文件刷新到磁盤。如果你退出Jupyter進程,文件應該出現。 –