2016-03-17 70 views
0

我用python3.4編寫了一個python腳本,並在Tegra K1處理器的chromebook上運行它。爲什麼寫入的python文件大小爲5120字節?

這是它爲幾分鐘運行代碼

def fib(n): 
    a, b = 1, 1 
    for i in range(n - 1): 
     a, b = b, a + b 
    return a 

i = 2 
while True: 
    n = fib(i) 
    with open('nums', 'w') as f: 
    f.write(str(n)) 
print(n) 
i += 1 

,然後我關閉它按Ctrl + C。之後,我檢查了名爲nums的書面文件的內容。但發現只有1被寫入,但文件大小爲5120 bytes

爲什麼文件大小爲5120字節?

+0

你一直打開該文件中的「W」模式,覆蓋當前數據的工作液。你想要「一個」模式來追加新的數據嗎?更好的是......如何在循環之前打開一次呢? – tdelaney

+0

還注意到,發佈的代碼在with子句中有縮進錯誤。 – tdelaney

+0

要添加到此,您可能也沒有正確關閉文件句柄。使用'with'使用python打開文件,這樣無論錯誤如何,句柄都會關閉。 – DuckPuncher

回答

0

循環邏輯看起來不正確:您每次打開文件時只有一個編號。下面是固定的版本:

with open('nums', 'w') as f: 
    i = 2 
    while True: 
     n = fib(i) 
     f.write(str(n)) 
     i += 1 

而且,由於你是Ctrl+C停止腳本,你可能要添加的f.flush()另一行f.write後,以確保變化刷新到磁盤。

編輯:

此外,作爲@tdelaney在註釋中提到(謝謝@tdelaney :)),你可以通過簡單地用with open('nums', 'wa')更換with open('nums', 'w')使用追加模式。然而,這種方法:

  1. 效率低:文件需要打開和關閉每個數字一次,而它是真的沒有必要。
  2. 不能很好地處理文件:腳本啓動時文件的內容不會被清除。因此,當您多次調用該腳本時,該文件將包含先前運行的結果。
+0

非常感謝!我認爲這是一個操作系統行爲,但它是程序中的一個錯誤。 但爲什麼'數量'的大小是5120?這只是巧合? –

0

嘗試做的寫循環

def fib() 

with open("nums", "a") as f: 

    <bulk of code> 

    f.write(str(n)) 
0

的原因,你的文件是大內的工作,是因爲它一直沒有停止,所以當你終止程序有寫有很多0字節無休止的循環下去。

這裏是

def fib(n): 
    a, b = 1, 1 
    for i in range(n - 1): 
     a, b = b, a + b 
    return a 


with open('nums', 'w') as f: 
    i = 1 
    while i <= 10: 
     n = fib(i) 
     f.write(str(n) + "\n") 
     i += 1 
相關問題