网络编程(part5)--文件读写偏移量及文件描述符
鄙人學習筆記
文章目錄
- 文件讀寫偏移量(文件指針)
- 定義
- 舉個例子1(讀寫操作的文件偏移量)
- 舉個例子2(文件偏移量的初始位置驗證)
- 基本操作
- 舉個例子1(tell()函數)
- 舉個例子2(tell()函數)
- 舉個例子3(seek()函數)
- 文件描述符
- 定義
- 獲取文件描述符
- 舉個例子
文件讀寫偏移量(文件指針)
定義
打開一個文件進行操作時,系統會自動生成一個記錄,記錄中描述了我們對文件的一系列操作。其中包括每次操作到的文件位置。文件的讀寫操作都是從這個位置開始進行的。
備注:在我們open一個文件時,就有了這個文件偏移量,但是當我們重新open的話,這個文件偏移量會被刷新。要注意的是,我們的讀寫操作用的是同一個文件偏移量。
舉個例子1(讀寫操作的文件偏移量)
康一康下面這段代碼:
結果:
我們發現,我們明明寫入數據了鴨~為啥,啥都沒打印出來?這是為啥呢?
這一切都使偏移量的錯,都是你!
因為我們一個文件對象,只擁有一個文件偏移量,無論是讀取還是寫入,用的都是同一個偏移量。當我們寫完”hello world”這個字符串時,文件偏移量就到末尾了。這時,我們再想進行讀取,就是從偏移量的位置(末尾)向后讀取,所以我們啥也讀不到。
舉個例子2(文件偏移量的初始位置驗證)
看以下一段代碼:
結果:
我們發現,沒有任何東西被打印出來,這是咋回事呢?這說明,當我們用追加操作a的方式打開文件時,文件偏移量在最末尾,所以我們讀不到任何東西。
備注:讀取r和寫入w的打開方式,文件偏移量在最開頭。
基本操作
①tell
tell()功能:獲取當前的文件偏移量,表示從開頭位置,向后偏移了多少。
②seek
seek(offset[,whence])功能:移動文件偏移量位置
參數:
offset代表相對于某個位置偏移量。可以是負數表示向前移動。
whence代表基準位置。默認值為 0,代表從文件開頭算起;1代表從當前位置算起,2 代表從文件末尾算起。
舉個例子1(tell()函數)
首先我們先看一下test文件中的數據:
看以下一段代碼:
輸出結果:
我們可以看到,test文件內有11個字節,我們的當前的文件偏移量為11,正好驗證了我們之前說的【追加操作a的方式打開文件時,文件偏移量在最末尾】
舉個例子2(tell()函數)
輸出結果:
由結果可知,我們讀倆字符,指針就向后走兩位。
舉個例子3(seek()函數)
我們先康一康下面這一段代碼:
結果:
如果我想在第二次讀取文件時,讓它從頭讀取呢?
這時,我們可以通過人為調整偏移量,來實現:
結果:
完整代碼:
fd = open('test','r+')#相對開頭位置向后偏移了多少 print("當前文件偏移量位置:",fd.tell()) #0 print(fd.read(2)) print("當前文件偏移量位置:",fd.tell()) #2#人為調整文件偏移 fd.seek(0,0) #相對開頭位置向后偏移0個字節 print(fd.read(2))fd.close()文件描述符
定義
系統中,每一個IO操作都會被分配一個整數作為編號,該整數即這個IO操作的文件描述符。文件描述符是不會重復的。
獲取文件描述符
- 獲取文件描述符函數
通過IO對象獲取對應的文件描述符。
舉個例子
代碼和結果放一起:
總結
以上是生活随笔為你收集整理的网络编程(part5)--文件读写偏移量及文件描述符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支付宝实体店通用红包怎么用
- 下一篇: 网络编程(part7)--网络主机/IP