python 的基礎學習 第九天 文件的操作
1,文件操作
參數:1,文件路徑 2,編碼方式,3,執行動作(打開方式),只讀,只寫,,讀寫,追加和讀寫。
1 打開文件,得到文件句柄並賦值給一個變量。2. 通過句柄對文件進行操作。3. 關閉文件。
f = open(‘yuyu‘,encoding=‘gbk‘,mode=‘r‘) #可以設f變量,f_obj,file,f_handler.....等文件句柄。 s = f.read() print(s) f.close()
open是windows的系統功能,windows的默認編碼方式是gbk,linux操作系統默認為utf-8。
流程:打開一個文件,產生一個句柄,對文件句柄進行操作,然後關閉。
讀:r只讀
1,文件以什麽編碼存儲的就以什麽編碼方式打開。
2,文件路徑:絕對路徑,從根目錄開始一級一級查找直到找到。
相對路徑,在同一文件夾下直接寫文件。
五種方式:
1,f.read,全部讀出來。只讀模式,可以不註明。默認就是只讀模式。
f=open(‘yu.bak‘,encoding=‘utf-8‘)
2,f.readline,一行一行的讀取。
3,f.readlines將原文件的每一行作為一個列表的元素讀取。
4,f.read(n)在r模式下按照字符讀取。n=(字符數)
在rb模式下read(n)按照字節讀取。rb模式只讀以bytes類型,非文字類的文件時用rb
5,循環讀取。這種方式最好,占內存少。
f = open(‘yu‘,‘r‘,encoding=‘utf-8‘) for i in f: print(i.strip()) f.close()
寫:w,write寫模式
f = open(‘yu‘,‘w‘,encoding=‘utf-8‘) s = f.write(‘何時明月有‘) print(s) f.close()
w 寫模式,沒有文件時創建一個文件寫入內容,有文件,將原文件內容清空,再寫入內容。
#1. 打開文件的模式有(默認為文本模式): r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】 w,只寫模式【不可讀;不存在則創建;存在則清空內容】 a, 只追加寫模式【不可讀;不存在則創建;存在則只追加內容】#2. 對於非文本文件,我們只能使用b模式,"b"表示以字節的方式操作(而所有文件也都是以字節的形式存儲的,使用這種模式無需考慮文本文件的字符編碼、圖片文件的jgp格式、視頻文件的avi格式) rb
f=open(‘yu.bak‘,mode=‘rb‘) s= f.read(6) print(s) f.close()#b‘alex\xe6\x98‘
wb ab 註:以b方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼 #3,‘+’模式(就是增加了一個功能) r+, 讀寫【可讀,可寫】 w+,寫讀【可寫,可讀】 a+, 寫讀【可寫,可讀】 #4,以bytes類型操作的讀寫,寫讀,寫讀模式 r+b, 讀寫【可讀,可寫】 w+b,寫讀【可寫,可讀】 a+b, 寫讀【可寫,可讀】
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+等模式下測試效果。
f = open(‘yu‘,‘r+‘,encoding=‘utf-8‘) s = f.truncate(4) print(s) f.close()
2,文件的修改
# ① 創建一個新的文件
# ② 讀取一個原文件
# ③ 將原文件的內容通過你想要的方式進行更改並寫入新文件
# ④ 將原文件刪除
# ⑤ 將新文件重命名
with 語句:
1,功能一自動關閉文件句柄。2,一次性操作多個文件 。
# import os # with open(‘yu‘,encoding=‘utf-8‘)as f1,\ # open(‘yu.bak‘,encoding=‘utf‘,mode=‘w‘)as f2: # content = f1.read() # new_content = content.replace(‘SB‘,‘alex‘) # f2.write(new_content) # os.remove(‘yu‘)
python 的基礎學習 第九天 文件的操作