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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 文件指针在文件末尾_python文件操作及seek偏移详解

發布時間:2023/12/10 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 文件指针在文件末尾_python文件操作及seek偏移详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、python文件操作中的編碼

本次測試是基于python 2.7.12?? OS:Ubuntu16.04? pycharm環境,以及win7下2.7.12;

首先說下漢字在文件中占用的字節數,這個先看以下實驗(win7)下 因為linux下不支持gbk,本文不講utf-8 ,gbk編碼具體知識,有興趣可以訪問http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html或自行搜索相當資料。本次實驗只講解python在使用utf-8和gbk編碼時,對漢字占用的字節有所不同。

先看下實驗截圖:

右上解的代碼如下:#-*-?coding:?utf-8?-*-

with?open("test2.txt","w")?as?f:

f.write("董hellow?world!")

f.write("Python?is?a?good?language!\n")

f.write("Python?是世界上最好的語言!")

with?open("test2.txt","r")?as?f:

print(len(f.read()))

f.seek(0)

print?f.read(2)

f.seek(0)

print?f.read(3)

f.tell()

保存運行(F5) 運行結果為圖左上角 出現長度78? 和漢字"董"的亂碼 再次從頭讀3個字節 可以正確顯示“董”

右下解的代碼如下:#-*-?coding:?gbk?-*-

with?open("test3.txt","w")?as?f:

f.write("董hellow?world!")

f.write("Python?is?a?good?language!\n")

f.write("Python?是世界上最好的語言!")

with?open("test3.txt","r")?as?f:

print(len(f.read()))

f.seek(0)

print?f.read(2)

f.tell()

保存運行(F5)運行結果為圖左下角 出現長度為68? 能正確顯示“董”

test2.txt 和test3.txt中的內容均一樣,只是在不同的編碼下存入文件中!

從實驗可以看出漢字在utf8編碼下占3個字節,gbk下占2個字節,而英文不管在那個編碼下都只占1個字節!

二、python文件操作

搞清楚以上問題我們可以通過操作文件來讀取內容,以防止是亂碼。

1、python文件操作主要通過file(3版本去掉了), open(2,3版本均有)函數來實現

open函數中最主要的幾個模式說明及對比:模式打開方式文件存在文件不存在

r只讀打開文件出錯

w只寫清除原有文件內容創建并打開新文件

a只寫(追加)保留文件內容,將新數據添加到文件末尾創建并打開新文件

r+讀寫從文件開始處讀或重寫文件內容出錯

w+讀寫清除文件內容創建并打開新文件

a+讀寫保留文件內容,將新數據添加到文件末尾創建并打開新文件

注:如是是對二進制文件操作即在以上模式中加一個b 如讀二制文件rb

2、文件操作方法實驗

f.write()??? #字符串寫入文件

f.writelines?? #將一串字符串寫入文件。 該序列可以是生成字符串的任何可迭代對象,通常是字符串列表

f.read([size])?? #默認讀出文件中所有內容,可以指定size(字節)

f.readline([size])??????? #默認每次讀取一行,字符串中保留一個尾隨的換行字符。

f.readlines([size])????? #默認將文件內容講到列表中保存

f.flush()??????? #將緩沖中的內容寫入磁盤

f.tell()?????? #顯示當前文件的指針所在位置

f.close()??? #關閉打開的文件

f.seek()?????? #對文件進行指針偏移操作,有三個模式,

seek(0,0) 默認移動到文件開頭或簡寫成seek(0)

seek(x,1) 表示從當前指針位置向后移x(正數)個字節,如果x是負數,則是當前位置向前移動x個字節

seek(x,2) 表示從文件末尾向前后移x(正數)個字節,如果x負數,則是從末尾向前移動x個字節

3、對文件seek詳細說明

實驗代碼如下:

先創建一個文件file2.txt#?-*-?coding:?utf-8?-*-

f?=?open("file2.txt",‘w+‘)

f.write("I?love?python\n")

f.write("python?是世界上最美麗的語言!\n")

f.write("python?世界上最美麗的語言?")

file2.txt內容如下:

I love python

python 是世界上最美麗的語言!

Python 世界上最美麗的語言

對file2.txt進行操作f?=?open("file2.txt",‘r‘)

print(len(f.read()))?????#文件總長度?89

print(f.tell())??????????#讀完文件,文件指針位置89

f.seek(0,0)??????????????#偏移回文件頭

print(f.readline())??????#打印出文件中一行(第一行)

print?f.tell()???????????#顯示文件指針現在的位置

f.seek(2,1)??????????????#從當前文件指針(向后)偏移2個字節

print(f.readline())??????#再打印一行(應該少2個字節)

print(f.tell())??????????#顯示?現在?的指針位置

f.seek(-7,1)?????????????#從當前位置向前偏移2個字節

print(f.readline())??????#打印下一行

print(f.tell())??????????#顯示?現在?的指針位置

f.seek(-9,2)?????????????#從尾部向前偏移9個字符

print(f.tell())??????????#顯示?現在?的指針位置

print(f.readline())??????#打印出內容

f.seek(0)??#==>默認是0?等等seek(0,0)

f.seek(80)??????#等同上面的seek(-9,2)?從尾部取

print(f.readline())

結果如圖:

本文均為在學習過程中的實驗結果,可能不同版本不同平臺略有誤差,如有不當之處,歡迎指正交流!

總結

以上是生活随笔為你收集整理的python 文件指针在文件末尾_python文件操作及seek偏移详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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