日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

关于python:为什么我不能在打开的文件上两次调用read()?

發布時間:2024/4/18 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于python:为什么我不能在打开的文件上两次调用read()? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于python:為什么我不能在打開的文件上兩次調用read()?

?

Why can't I call read() twice on an open file?

對于我正在做的練習,我試圖使用read()方法兩次讀取給定文件的內容。 奇怪的是,當我第二次調用它時,似乎沒有將文件內容作為字符串返回?

這是代碼

1
2
3
4
5
6
7
8
9
10
11
12
13

f?=?f.open()

# get the year
match?=?re.search(r'Popularity in (\d+)',?f.read())

if?match:
??print?match.group(1)

# get all the names
matches?=?re.findall(r'<td>(\d+)</td><td>(\w+)</td><td>(\w+)</td>',?f.read())

if?matches:
??# matches is always None

我當然知道這不是最有效或最好的方法,這不是重點。 關鍵是,為什么不能兩次調用read()? 我是否需要重置文件句柄? 還是關閉/重新打開文件以執行此操作?

?相關討論

?


調用read()會讀取整個文件,并將讀取的游標留在文件的末尾(沒有其他要讀取的內容)。如果您希望一次讀取一定數量的行,則可以使用readline(),readlines()或使用for line in handle:遍歷行。

要直接回答您的問題,一旦使用read()讀取了文件,就可以使用seek(0)將讀取的光標返回到文件的開頭(此處是文檔)。如果您知道文件不會太大,也可以將read()輸出保存到變量中,并在findall表達式中使用它。

附言完成操作后,不要忘記關閉文件;)

?相關討論

?


是的,如上所述

我只寫一個例子:

1
2
3
4
5
6

>>>?a?=?open('file.txt')
>>>?a.read()
#output
>>>?a.seek(0)
>>>?a.read()
#same output

?

?


到目前為止,回答這個問題的每個人都是絕對正確的-read()在文件中移動,因此,在您調用它之后,您將無法再次調用它。

我要補充的是,在您的特定情況下,您無需重新查找文件或重新打開文件,您只需將已閱讀的文本存儲在局部變量中,然后使用兩次,或者在您的程序中進行任意多次:

1
2
3
4
5
6
7
8
9
10

f?=?f.open()
text?=?f.read()?# read the file into a local variable
# get the year
match?=?re.search(r'Popularity in (\d+)',?text)
if?match:
??print?match.group(1)
# get all the names
matches?=?re.findall(r'<td>(\d+)</td><td>(\w+)</td><td>(\w+)</td>',?text)
if?matches:
??# matches will now not always be None

?相關討論

?


讀指針移動到最后一個讀字節/字符之后。使用seek()方法將讀取指針后退到開頭。


每個打開的文件都有一個關聯的位置。
當您讀取()時,您將從該位置讀取。
例如,read(10)從新打開的文件中讀取前10個字節,然后另一個read(10)讀取接下來的10個字節。
不帶參數的read()讀取文件的所有內容,將文件位置保留在文件末尾。下次調用read()時,沒有任何內容可供閱讀。

您可以使用seek移動文件位置。在您的情況下,可能更好的方法是做一個read()并保留兩個搜索的結果。


我總是發現讀取方法有點像在黑暗的小巷中漫步。您會停下來停下來,但是如果您不計算步數,則不確定您走了多遠。 Seek通過重新定位來提供解決方案,另一個選項是Tell,它返回沿文件的位置。可能是Python文件api可以將讀取和查找合并為一個read_from(position,bytes)以使其變得更簡單-在這種情況下,您應該閱讀此頁面。

?

?


read()消耗。因此,您可以重設文件,或在重新讀取之前尋求開始。或者,如果適合您的任務,則可以使用read(n)僅消耗n字節。

總結

以上是生活随笔為你收集整理的关于python:为什么我不能在打开的文件上两次调用read()?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。