[英]Counting number of lines in a file multiple times in Python
為什么第二次調用:
num_lines = len(file.read().split("\n")) - 1
返回 0 而不是正確的值?
with open("Data.txt", "r+") as file:
num_lines = len(file.read().split("\n")) - 1
print("Old num_lines: " + str(num_lines))
# Add 10 new lines of data to end of the file
for i in range(num_lines, num_lines + 10):
file.write("{}, {}\n".format(i, random.randint(0, 10)))
num_lines = len(file.read().split("\n")) - 1
print("New num_lines: " + str(num_lines))
閱讀文件就像閱讀一本書,其中有一個書簽,您可以在閱讀過程中移動該書簽。
當您打開一個文件時,您在初始 position 中有那個“書簽”,在讀取它的某些部分后,它會被移動以記住要讀取的下一個字節。
你的第二個
num_lines = len(file.read().split("\n")) - 1
在讀取整個文件之后,位於所有其他讀取的同一塊中。 “書簽”已經在文件末尾。
我建議不要重新讀取文件,而是在第一次讀取時保存初始行數:
old_num_lines = num_lines = len(file.read().split("\n")) - 1
無論如何,通過seek()
方法回到文件的開頭也很簡單:
file.seek(0)
你讀了一次文件,你不能再讀了,seek 已經到了文件的末尾。
您需要尋找文件的開頭。
file.seek(0)
在嘗試再次讀取文件之前。
附帶說明一下,您無需再次閱讀該文件。 如果您在代碼中向文件添加 10 行,則新的行數將是:
num_lines += 10
您打開文件一次( with open("Data.txt", "r+") as file
)。 你讀了一堆東西,它改變了文件中你當前的 position。 第一個“讀取”操作將 position 設置在文件的最后。
然后你寫一些東西,繼續將當前的 position 移動到文件的末尾。
最后,您執行另一個file.read()
。 這意味着“從文件中的當前 position 開始讀取 N 個字節”。 由於當前的 position 是文件的最后,所以你什么也沒讀。
查看正式文檔以獲取更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.