簡體   English   中英

為什么書面python文件的大小為5120字節?

[英]Why is the written python file 5120 bytes in size?

我用python3.4編寫了一個python腳本,並在帶有Tegra K1處理器的chromebook上運行了它。

這是代碼

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字節?

循環邏輯似乎不正確:每次只有一個數字要寫入時,您都在打開文件。 這是固定版本:

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', 'w')替換with open('nums', 'wa')來使用附加模式with open('nums', 'wa') 但是這種方法:

  1. 效率低:實際上每個文件都需要為每個數字打開和關閉一次。
  2. 無法很好地處理文件:腳本啟動時不會清除文件的內容。 因此,當您多次調用該腳本時,該文件將包含先前運行的結果。

嘗試在寫循環內完成工作

def fib()

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

  <bulk of code>

  f.write(str(n))

您的文件很大的原因是因為它一直循環不斷而沒有停止,所以當您終止程序時,那里會寫很多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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM