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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络编程(part5)--文件读写偏移量及文件描述符

發布時間:2023/12/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络编程(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操作的文件描述符。文件描述符是不會重復的。

獲取文件描述符

  • 獲取文件描述符函數
fileno()

通過IO對象獲取對應的文件描述符。

舉個例子

代碼和結果放一起:

總結

以上是生活随笔為你收集整理的网络编程(part5)--文件读写偏移量及文件描述符的全部內容,希望文章能夠幫你解決所遇到的問題。

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