Python–文件操作
- 2020 年 1 月 19 日
- 筆記
Python 基礎-文件操作
文件處理流程
1.打開文件,得到文件句柄並賦值給一個變量
2.通過句柄對文件進行操作
3.關閉文件
r模式,默認模式,文件不存在則報錯
w模式,文件不存在則創建,文件存在則覆蓋
a模式,文件不存在則創建,文件存在則不會覆蓋,寫內容會以追加的方式寫(寫日誌文件的時候常用),追加模式是一種特殊的寫模式
b(rb,wb,ab)模式:不用加encoding:utf-8
基本操作
打開文件
open(path, flag[, encoding][, errors]) path:要打開文件的路徑 flag:打開文件的方式 r 以只讀的方式打開文件,文件的描述符放在文件的開頭 rb 以二進制格式打開一個文件用於只讀,文件的描述符放在文件的開頭 r+ 打開一個文件用於讀寫,文件的描述符放在文件的開頭 w 打開一個文件只用於寫入,如果該文件已經存在會覆蓋,如果不存在則創建一個新文件 wb 打開一個文件只用於寫入二進制,如果該文件已經存在會覆蓋,如果不存在則創建一個新文件 w+ 打開一個文件用於讀寫,如果該文件已經存在會覆蓋,如果不存在則創建一個新文件 a 打開一個文件用於追加,如果文件存在,文件描述符將會放在文件末尾 a+ encoding:編碼格式 errors:錯誤處理 path = r"C:UsersDesktopfile1.txt" #ignore 忽略錯誤 f = open(path, "r",encoding="gbk")
打開文件的模式有:
- r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
- w,只寫模式【不可讀;不存在則創建;存在則清空內容】
- x, 只寫模式【不可讀;不存在則創建,存在則報錯】
- a, 追加模式【可讀; 不存在則創建;存在則只追加內容】
"+" 表示可以同時讀寫某個文件
- r+, 讀寫【可讀,可寫】
- w+,寫讀【可讀,可寫】
- x+ ,寫讀【可讀,可寫】
- a+, 寫讀【可讀,可寫】
"b"表示以位元組的方式操作
- rb 或 r+b
- wb 或 w+b
- xb 或 w+b
- ab 或 a+b
註:以b方式打開時,讀取到的內容是位元組類型,寫入時也需要提供位元組類型,不能指定編碼
讀文件內容
# 1、讀取文件全部內容 str1 = f.read() print(str1) # 2、讀取指定字符數 str2 = f.read(10) print("*"+str2+"*") str3 = f.read(10) print("*"+str3+"*") # 3、讀取整行,包括"n"字符 str4 = f.readline() print(str4) str5 = f.readline() print(str5) # 4、讀取指定字符數 str6 = f.readline(10) print(str6) # 5、讀取所有行並返回列表 list7 = f.readlines() print(list7) # 6、若給定的數字大於0,返回實際size位元組的行數 list8 = f.readlines(20) print(list8) # 7、修改描述符的位置 f.seek(10) str9 = f.read() print(str9)
關閉文件
f.close()
# 一個完整的過程 try: f1 = open(path,"r", encoding="gbk") print(f1.read()) finally: if f1: f1.close()
with open(path,"r",encoding="gbk") as f2: print(f2.read())
寫文件
path = r"C:UsersDesktopfile4.txt" f = open(path,"w") # 1、將信息寫入緩衝區 f.write("lee is a good man") # 2、刷新緩衝區 # 直接把內部緩衝區的數據立刻寫入文件,而不是被動的等待自動刷新緩衝區寫入 f.flush() f.write("lee is a good mann") f.close() with open(path,"a") as f: f.write("good man")
with open('a.txt','w') as f: pass with open('a.txt','r') as read_f,open('b.txt','w') as write_f: data=read_f.read() write_f.write(data)
path = r"C:UsersyanjiDesktopday7test1" with open(path,"wb") as f3: str = "lee is a good man" f3.write(str.encode("utf-8")) with open(path,"rb") as f2: data = f2.read() print(data) print(type(data)) newDate = data.decode("utf-8") print(newDate) print(type(newDate))