簡體   English   中英

在 Python 中多次計算文件中的行數

[英]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.

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