![](/img/trans.png)
[英]written out bytes size and actually size are different using python's file.write()
[英]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')
。 但是這種方法:
嘗試在寫循環內完成工作
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.