我正在嘗試計算文件中的行數,但出現了奇怪的結果。下面有一個MWE,我相信這是不言而喻的:使用Python擦除文件中的行數擦除文件
file=open('Example.txt','r')
print(sum(1 for line in file))
print(len(file.readlines()))
當我運行它,我得到的輸出X
(行權數)和0
。所以第二種方法要麼不工作,要麼讀取一個空的變量。如果我切換順序,我得到相同的結果,所以它正在工作,但不知何故變量被擦除。如果我使用相同的文件分配file_1
和file_2
,並使用不同的變量運行每個方法,則會得到X和X,因此在完成操作後變量會被擦除。
我也試過從"r"
改爲"r+"
,但沒有運氣。有人可以解釋這裏發生了什麼?對列表的操作不應該改變列表,至少這是我所教的內容。
謝謝!
謝謝你,我不知道這樣的事情可能發生。這個迭代器在哪裏顯式聲明?我怎麼知道我什麼時候會遇到這個問題?根據我對C和MATLAB的經驗,我必須重置迭代器,但在Python中,我確實認爲這是一個內部過程。 'r'是我原來的代碼中的剩餘部分,我將使用'r +',但感謝您的提示! – Alegom
它是一個內置的,因此它在'C'中實現(很確定位於['fileobject.c'](https://github.com/python/cpython/blob/master/Objects/fileobject.c)) 。你可以通過檢查'iter(obj)是obj'來發現迭代器在迭代完成後會耗盡。如果是這種情況,'obj .__ iter__'在其實現中返回'self',導致所見證的行爲。如果沒有,'__iter__'方法返回一個閃亮的新迭代器對象,可以迭代多次@Alegom –
你有什麼建議我應該留意這個事件嗎?在這種情況下,我的文件有15行。誰知道迭代器會很快耗盡? – Alegom