关于python:为什么我不能在打开的文件上两次调用read()?
關于python:為什么我不能在打開的文件上兩次調用read()?
?
Why can't I call read() twice on an open file?
對于我正在做的練習,我試圖使用read()方法兩次讀取給定文件的內容。 奇怪的是,當我第二次調用它時,似乎沒有將文件內容作為字符串返回?
這是代碼
| 1 | f?=?f.open() |
我當然知道這不是最有效或最好的方法,這不是重點。 關鍵是,為什么不能兩次調用read()? 我是否需要重置文件句柄? 還是關閉/重新打開文件以執(zhí)行此操作?
?相關討論
?
調用read()會讀取整個文件,并將讀取的游標留在文件的末尾(沒有其他要讀取的內容)。如果您希望一次讀取一定數(shù)量的行,則可以使用readline(),readlines()或使用for line in handle:遍歷行。
要直接回答您的問題,一旦使用read()讀取了文件,就可以使用seek(0)將讀取的光標返回到文件的開頭(此處是文檔)。如果您知道文件不會太大,也可以將read()輸出保存到變量中,并在findall表達式中使用它。
附言完成操作后,不要忘記關閉文件;)
?相關討論
?
是的,如上所述
我只寫一個例子:
| 1 | >>>?a?=?open('file.txt') |
?
?
到目前為止,回答這個問題的每個人都是絕對正確的-read()在文件中移動,因此,在您調用它之后,您將無法再次調用它。
我要補充的是,在您的特定情況下,您無需重新查找文件或重新打開文件,您只需將已閱讀的文本存儲在局部變量中,然后使用兩次,或者在您的程序中進行任意多次:
| 1 | f?=?f.open() |
?相關討論
?
讀指針移動到最后一個讀字節(jié)/字符之后。使用seek()方法將讀取指針后退到開頭。
每個打開的文件都有一個關聯(lián)的位置。
當您讀取()時,您將從該位置讀取。
例如,read(10)從新打開的文件中讀取前10個字節(jié),然后另一個read(10)讀取接下來的10個字節(jié)。
不帶參數(shù)的read()讀取文件的所有內容,將文件位置保留在文件末尾。下次調用read()時,沒有任何內容可供閱讀。
您可以使用seek移動文件位置。在您的情況下,可能更好的方法是做一個read()并保留兩個搜索的結果。
我總是發(fā)現(xiàn)讀取方法有點像在黑暗的小巷中漫步。您會停下來停下來,但是如果您不計算步數(shù),則不確定您走了多遠。 Seek通過重新定位來提供解決方案,另一個選項是Tell,它返回沿文件的位置。可能是Python文件api可以將讀取和查找合并為一個read_from(position,bytes)以使其變得更簡單-在這種情況下,您應該閱讀此頁面。
?
?
read()消耗。因此,您可以重設文件,或在重新讀取之前尋求開始。或者,如果適合您的任務,則可以使用read(n)僅消耗n字節(jié)。
總結
以上是生活随笔為你收集整理的关于python:为什么我不能在打开的文件上两次调用read()?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++文件打开模式详解
- 下一篇: Python换行符问题:\r\n还是\n