Python-文件操作

文件操作

Python-文件操作

open() 函數有三個參數: 第一個是文件名字(相對路徑)、第二個是模式,模式有 r(只讀)、w(寫)、a(追加模式)、還有 r+可讀可寫 、w+可寫可讀、a+可追加可讀 ,第三個是編碼,文件存在硬盤實際都是以二進制形式存儲,所以不管寫和讀都要編碼解碼。*open()方法默認是以系統的編碼方式打開*(windows:GBK 、Linux:UTF-8)

文件修改操作,其實本質就是先文件內容加載到內存,然後修改內存裏的內容,再覆蓋源文件,所以 用 寫模式(w)操作文件要小心,因爲覆蓋。

ff.read() 是把文件所有一起讀出來

Python-文件操作

ff.readline()是一行一行的讀文件:

Python-文件操作

ff.readlines() 是把所有文件內容讀出來,以列表(list)形式打包:

Python-文件操作

ff.flush() 刷新。寫數據的時候,程序沒運行完,數據不會更新到文件上,這個函數可以在程序沒運行完的時候 同步到文件。

Python-文件操作

文件處理b模式

Python-文件操作

b模式就是以原生二進制方式讀取文件內容。用了b模式不能在代碼裏指定編碼。

打開文件的模式有(默認爲文本模式):
r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
w,只寫模式【不可讀;不存在則創建;存在則清空內容】
a, 之追加寫模式【不可讀;不存在則創建;存在則只追加內容】

#2. 對於非文本文件,只能使用b模式,"b"表示以字節的方式操作(而所有文件也都是以字節的形式存儲的,使用這種模式無需考慮文本文件的字符編碼、圖片文件的jgp格式、視頻文件的avi格式)
rb
wb
ab
注:以b方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼

windows平臺回車換行有兩個字符 \r \n 如下圖:

Python-文件操作

b模式下還原字符串,打印的時候加解碼:

Python-文件操作

b模式寫入數據:

ff.write('此情無計可消除\n'.encode('utf-8'))

ff.write(bytes('雁字回時,月滿西樓\n',encoding='utf-8'))

Python-文件操作

tell() 方法是捕獲光標位置,readlines方法全部內容讀完,光標在22位置,一個漢字佔3個字節,加上回車鍵兩個字節(\r\n),這裏沒顯示\r是因爲python自動優化了,加上newline=''就可以看到。

Python-文件操作

文件內光標移動

一: read(3):

  1. 文件打開方式爲文本模式時,代表讀取3個字符

  2. 文件打開方式爲b模式時,代表讀取3個字節

二: 其餘的文件內光標移動都是以字節爲單位如seek,tell,truncate

注意:

  1. seek有三種移動方式0,1,2,其中1和2必須在b模式下進行,但無論哪種模式,都是以bytes爲單位移動的

  2. truncate是截斷文件,所以文件的打開方式必須可寫,但是不能用w或w+等方式打開,因爲那樣直接清空文件了,所以truncate要在r+或a或a+等模式下測試效果

下圖 ff.seek(1) 代表光標移動1個字節,由於文檔開頭是漢字,一個漢字佔三個字節,這相當於在一個漢字中間開始讀起,那就報錯。

Python-文件操作

seek() 有3個參數 :第一個參數 代表 是移動光標 多少個字節。 第二個參數默認是0,可以輸入1,代表是每次移動光標都以當前位置爲基礎再移動,如下圖:

Python-文件操作

注:要用後面兩個參數,打開文件必須以b模式

使用第三個參數,表示倒序移動光標,如圖:

Python-文件操作
倒序要用負數,參數爲2

ff.read(4) 表示讀4個字符 (read() 方法是以字符爲單位讀取)

ff.truncate(14) 表示截取14個字節,注意:任何模式都可以使用 ,除了 w 或者 w+ 模式 ,因爲 w模式打開文件就會覆蓋爲空。

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