python小白必看的檔案指標用法

2021-10-01 11:22:27 字數 4764 閱讀 3096

或許有的小白不知道這個檔案指標就會出現以下問題:

案例一:

**含義:寫入三句話,並呼叫兩次read()函式讀取兩次文字

file

=open

("c:\\try.txt"

,'w'

,encoding=

"utf-8"

)file

.write(

"i'm the first row.\n"

)file

.write(

"i'm the second row.\n"

)file

.write(

"i'm the third row.\n"

)file

.close(

)file

=open

("c:\\try.txt"

,'r'

,encoding=

"utf-8"

)print

("第一眼"

)print

(file

.read())

print

("第二眼"

)print

(file

.read())

file

.close(

)print

("程式執行完畢"

)'''

執行結果:

第一眼i'm the first row.

i'm the second row.

i'm the third row.

第二眼程式執行完畢

'''

案例二:

**含義,統計文字行數以及單詞有多少個及單詞出現的次數

with

open

("c:\\try.txt"

,'r+'

,encoding=

"utf-8"

)as f:

f.write(

"i'm the first row.\n"

) f.write(

"i'm the second row.\n"

) f.write(

"i'm the third row.\n"

) line=f.read(

).count(

"\n"

)print

("行數是:"

, line)

print

("單詞的個數是:"

, line + f.read(

).count(

" ")

) word=f.read(

).replace(

"\n"

," "

).replace(

".","")

.split(

" ")

word.pop(

) dic=

for i in word:

dic[i]

=[word.count(i)

]print

(dic)

'''執行結果:

行數是: 0

單詞的個數是: 0

{}'''

提出問題:咦!為什麼都沒有成功呢?其實**是對的,就是忽略了檔案的指標,這兩個案例都是同乙個問題,那到底是什麼因素導致我們無法二次讀取呢?

這是因為python讀取文字採用了文字指標,指標在哪就在哪寫,指標在哪,你就只能讀取指標後面的東西。

舉個例子

注意:這個檔案中寫入的還是案例一,寫入進去的三句話。

file

=open

("c:\\try.txt"

,'r'

,encoding=

"utf-8"

)print

(file

.read(1)

)print

(file

.read(2)

)print

(file

.read(3)

)'''

執行結果:i'm

th'''

結論:可以看到第乙個read()裡面的引數是1,表示讀取指標後面乙個元素,讀取完,指標後移動一位,第二個read()裡面的引數是2,表示讀取指標後面的兩個元素,讀取完,指標後移動兩位等等,以此類推。這就為什麼能解釋為什麼案例一與案例二的問題了,讀取完或者寫完,指標都在文字的結尾處了,無論你做什麼操作,都無法檢視。

那麼我們知道原因的所在了,引出今天的正題!!!

seek()函式設定游標的位置

tell()函式獲取檔案的指標位置

使用seek()設定指標的位置,以便重新讀取

seek(x,y)裡面有兩個引數

x代表從檔案開頭的第幾個位元組位置開始讀取

y有三個選項,主要是以什麼為參考點,來進行指標移動的。

(1)0

表示絕對位置(檔案的開頭位置),如果不選第二個引數,預設為0。

(2)1

表示相對位置(游標的當前位置)。

(3)2

表示游標在檔案的末尾,可以從檔案的末尾,移動幾個位置後開始讀。

注意:x都可以是負數,要不在y為2的時候用正數當然會報錯,所以得用負數。

案例一:使用seek()與tell()函式後的效果

file

=open

("c:\\try.txt"

,'w'

, encoding=

"utf-8"

)file

.write(

"i'm the first row.\n"

)file

.write(

"i'm the second row.\n"

)file

.write(

"i'm the third row.\n"

)file

.close(

)file

=open

("c:\\try.txt"

,'r'

, encoding=

"utf-8"

)print

("第一眼"

)print

(file

.read())

print

("指標的位置:"

,file

.tell())

file

.seek(0)

print

("指標的位置:"

,file

.tell())

print

("第二眼"

)print

(file

.read())

file

.close(

)'''

執行結果:

第一眼i'm the first row.

i'm the second row.

i'm the third row.

指標的位置: 61

指標的位置: 0

第二眼i'm the first row.

i'm the second row.

i'm the third row.

'''

結論:二次讀取成功,說明我們之前的分析正確。

那麼我們也試試把seek()函式加入到第二個案例裡吧!

案例二:使用seek()函式後的效果。

with

open

("c:\\try.txt"

,'r+'

, encoding=

"utf-8"

)as f:

f.write(

"i'm the first row.\n"

) f.write(

"i'm the second row.\n"

) f.write(

"i'm the third row.\n"

) f.seek(0)

line = f.read(

).count(

"\n"

)print

("行數是:"

, line)

f.seek(0)

print

("單詞的個數是:"

, line + f.read(

).count(

" ")

) f.seek(0)

word = f.read(

).replace(

"\n"

," "

).replace(

".","")

.split(

" ")

word.pop(

) dic =

for i in word:

dic[i]

=[word.count(i)

]print

(dic)

'''執行結果:

行數是: 3

單詞的個數是: 12

'''

小白必看的Python爬蟲流程

定義 網路爬蟲 web spider 又被稱為網頁蜘蛛,是一種按照一定的規則,自動地抓取 資訊的程式或者指令碼。簡介 網路蜘蛛是乙個很形象的名字。如果把網際網路比喻成乙個蜘蛛網,那麼spider就是在網上爬來爬去的蜘蛛。網路蜘蛛是通過網頁的鏈結位址來尋找網頁,從 某乙個頁面開始,讀取網頁的內容,找到...

python小白必看,匿名函式

在函式中使用lambda 語句來生成乙個函式物件,廣泛用於需要函式物件作為引數或比較簡單並且只使用一次的場合。匿名函式 沒有名字的函式,且只有乙個式子,只能做一些簡單的東西 lambda 形參1,形參2,形參n 表示式 lambda 宣告 後接形參 後加 表示式 lambda 引數1 引數2 引數n...

小白必看 Python高階應用

python相信大家並不陌生,身邊有很多的朋友都在學習python,今天就給大家詳細介紹下python高階應用。lambda 函式 lambda 函式是一種比較小的匿名函式 匿名是指它實際上沒有函式名。python 函式通常使用 def a function name 樣式來定義,但對於 lambd...