Python文件處理之seek(), tell()用法

今天寫socket傳輸大文件時, 發現了兩個文件處理的神方法, seek(), 下面來介紹一下seek, 可以結合指針來理解

seek用法:就是定義指針類型。 seek(v1, v2):參數v1表示跨度是多少, 參數v2代表起始位置, 只能有三個參數:0,代表從文件最開始位置開始;1,表示從每次當前位置開始,2,表示從文件最後數據開始。

下面先來一段代碼, 通過代碼進行講解

data3.txt中數據: AAABBBCCCDDDEEEFFFSSS

f = open('data3.txt', 'rb')
# 從文件初始位置開始, 偏移量爲0, 也就是從文件第一個字符開始
f.seek(0, 0)
data1 = f.read(4)
data2 = f.read(4)
print(data1)
print(data2)

 

爲什麼data1是AAAB, data2中是BBCC呢?

 

f.tell()就是可以打印出當前指針所在的位置

 

首先 f.seek(0, 0):  定義指針: 指針初始位置只想文件數據最開始的位置, 偏移量是0.   指針開始位置就是文件數據最開始, 也就是第一個A, 然後data1 = f.read(4)讀取了4個數據之後, 指針到達了第二個B的位置, 所以data2 = f.read()的時候, 指針已經移動到了第二個B的位置, 再接着讀取4個字符就是BBCC

ps:因爲我們之前沒有讀取數據, 從頭打開文件讀取數據, 所以當前位置也是文件數據最開始, 即第一個A, 所以在這裏f.seek(0, 0)和f.seek(0, 1)其實是一樣的, 

 

下面來看看他倆不一樣的地方:

 

f = open('data3.txt', 'rb')
f.seek(0, 0)
data1 = f.read(4)
data2 = f.read(4)
print(data1)
print(data2)
f.seek(2, 1)
data3 = f.read(4)
print(data3)
f.seek(2, 0)
data4 = f.read(4)
print(data4)

 

在第七行我們接着上面的重新定義一下指針, f.seek(2, 1) 。    這次的指針, 起始位置就是當前指針的位置, 偏移量是2。 由上一個代碼和圖我們看出, 這段代碼的前6行的執行會讓指針停在第二個C的位置, 然後我們重新定義的指針起始位置就是當前位置, 偏移量是2, 所以data3 = f.read(4)  就是從當前位置下一個字符開始算起,即第三個C處先向後偏移兩個字符, 再取4個字符, 所以就是data3的數據就是DDEE

最後第十行我們又重新定義了指針,f.seek(2, 0), 也就是說我們又重新把指針定義爲文件數據的起始位置, 偏移量是2。 雖然這段代碼的前9行會讓指針停在第二個D的位置, 但是我們重新定義了之後嗎指針就只想文件數據最開始的位置了, 然後偏移兩個數據再取4個字符就是ABBB了

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章