python中查找文件当前位置的命令为tell()_Python文件处理之seek(), tell()用法...
今天寫socket傳輸大文件時, 發(fā)現(xiàn)了兩個文件處理的神方法, seek(), 下面來介紹一下seek, 可以結(jié)合指針來理解
seek用法:就是定義指針類型。 seek(v1, v2):參數(shù)v1表示跨度是多少, 參數(shù)v2代表起始位置, 只能有三個參數(shù):0,代表從文件最開始位置開始;1,表示從每次當(dāng)前位置開始,2,表示從文件最后數(shù)據(jù)開始。
下面先來一段代碼, 通過代碼進(jìn)行講解
data3.txt中數(shù)據(jù): 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()就是可以打印出當(dāng)前指針?biāo)诘奈恢?/p>
首先 f.seek(0, 0):? 定義指針: 指針初始位置只想文件數(shù)據(jù)最開始的位置, 偏移量是0.? ?指針開始位置就是文件數(shù)據(jù)最開始, 也就是第一個A, 然后data1 = f.read(4)讀取了4個數(shù)據(jù)之后, 指針到達(dá)了第二個B的位置, 所以data2 = f.read()的時候, 指針已經(jīng)移動到了第二個B的位置, 再接著讀取4個字符就是BBCC
ps:因?yàn)槲覀冎皼]有讀取數(shù)據(jù), 從頭打開文件讀取數(shù)據(jù), 所以當(dāng)前位置也是文件數(shù)據(jù)最開始, 即第一個A, 所以在這里f.seek(0, 0)和f.seek(0, 1)其實(shí)是一樣的,
下面來看看他倆不一樣的地方:
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) 。? ? 這次的指針, 起始位置就是當(dāng)前指針的位置, 偏移量是2。?由上一個代碼和圖我們看出, 這段代碼的前6行的執(zhí)行會讓指針停在第二個C的位置, 然后我們重新定義的指針起始位置就是當(dāng)前位置, 偏移量是2, 所以data3 = f.read(4)? 就是從當(dāng)前位置下一個字符開始算起,即第三個C處先向后偏移兩個字符, 再取4個字符, 所以就是data3的數(shù)據(jù)就是DDEE
最后第十行我們又重新定義了指針,f.seek(2, 0), 也就是說我們又重新把指針定義為文件數(shù)據(jù)的起始位置, 偏移量是2。?雖然這段代碼的前9行會讓指針停在第二個D的位置, 但是我們重新定義了之后嗎指針就只想文件數(shù)據(jù)最開始的位置了, 然后偏移兩個數(shù)據(jù)再取4個字符就是ABBB了
原文鏈接:https://blog.csdn.net/wangziyang777/article/details/105247330
總結(jié)
以上是生活随笔為你收集整理的python中查找文件当前位置的命令为tell()_Python文件处理之seek(), tell()用法...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot项目中引入Aspec
- 下一篇: 电脑管理员权限在哪里可以打开