一、文件處理初識
- 打開文件,得到文件句柄并賦值給一個變量
- 通過文件句柄對文件進行操作
- 關閉文件
- 文本示例
漢皇重色思傾國,御宇多年求不得。
楊家有女初長成,養在深閨人未識。
天生麗質難自棄,一朝選在君王側。
回眸一笑百媚生,六宮粉黛無顏色。
春寒賜浴華清池,溫泉水滑洗凝脂。
侍兒扶起嬌無力,始是新承恩澤時。
- 基本操作
f = open("長恨歌", 'r', encoding="utf-8") # open函數會使用當前系統的編碼打開
data = f.read()
print(data)
f.close()
二、基本文件處理
- 讀模式:r
f = open("長恨歌",'r', encoding="utf-8") # open函數會使用當前系統的編碼打開print(f.read()) #讀取全部,按字符讀
print(f.readable()) #判斷文件是否可讀 True
print(f.readline(), end='') #讀一行,end='' 換行符
print(f.readline()) #楊家有女初長成,養在深閨人未識。
print(f.readlines()) #將所有行讀處理放到列表中f.close()
- 寫模式:w
- 只有字符串才能寫到文件中
f = open("dongfei_file", 'w', encoding="utf-8")f.write("漢皇重色思傾國,御宇多年求不得。\n")
f.write("楊家有女初長成,養在深閨人未識。\n")
print(f.writable()) #判斷文件是否可寫 True
f.writelines(["天生麗質難自棄,一朝選在君王側。\n", "回眸一笑百媚生,六宮粉黛無顏色。\n"]) #將列表中的元素寫到文件中f.close()
- 追加模式:a
f = open("dongfei_file", 'a', encoding="utf-8")f.write("春寒賜浴華清池,溫泉水滑洗凝脂。") #寫到文件最后f.close()
- 讀寫模式:r+
寫讀模式:w+,x+,a+
模擬修改文件,硬盤上的文件是無法修改的
f = open("dongfei_file", 'r', encoding="utf-8")
data = f.readlines()
f.close()f2 = open("new_dongfei_file", 'w', encoding="utf-8")
f2.writelines(data[0]) #文件的處理邏輯
f2.close()
- 自動關閉文件
with open("a.txt", "r", encoding="utf-8") as src_f, \open("new_a.txt", "w", encoding="utf-8") as des_f:data = src_f.readline()des_f.write(data)print(data)
- 二進制讀:rb
with open("a.txt", "rb") as f:data = f.read()print(data)print(data.decode())
- 二進制寫:wb
with open("b.txt", "wb") as f:f.write(bytes("dongfei 你好\n", encoding="utf-8"))f.write("dongfei2 你好".encode("utf-8"))f.write(b"dongfei3\n") #這樣方法不能寫中文
- 二進制追加:ab
- 文本模式:t
二進制模式:b,二進制模式可以跨平臺
其他方法:
f = open("c.txt", "w", encoding="utf-8")
print(f.closed) #判斷文件是否是關閉的
print(f.encoding) #打印文件打開的編碼
f.flush() #將內存中修改的數據保存至硬盤
print(f.tell()) #光標當前所在位置
f.seek(0) #控制光標的移動,按字節移動
f.truncate() #截取
- 光標操作
#絕對位置seek
with open("dongfei_file", "r", encoding="utf-8") as f:print(f.tell()) #0f.seek(10)print(f.tell()) #10f.seek(3)print(f.tell()) #3,默認從文件開頭seek#相對位置seek
with open("dongfei_file", "rb") as f:print(f.tell()) #0f.seek(10,1)print(f.tell()) #10f.seek(3,1)print(f.tell()) #13 ,以相對位置seek#倒敘位置seek
with open("dongfei_file", "rb") as f:print(f.tell()) #0f.seek(-10,2) #倒敘seek,-10是往回移動print(f.tell())f.seek(-3,2)print(f.tell()) #以相對位置seek
- 讀出文件的最后一行
with open("dongfei_file", "rb") as f:for i in f:offs = -10while True:f.seek(offs,2)data = f.readlines()if len(data) > 1:print("文件的最后一行:",data[-1].decode("utf-8"))breakoffs *= 2