文件是操做系統爲用戶提供的一個虛擬單位編碼
文件對象 open(打開) 文件名 打開模式 打開文件的字符編碼 f = open( "filename", "rt", encoding="utf8") data = f.read() print(data) f.flush() # 保存文件 f.close() # 關閉文件
模式 | 描述 |
---|---|
r | 只讀 |
w | 可寫,清空後寫入 |
a | 追加 |
方式 | 描述 |
---|---|
t | txt文本文件 |
b | bytes 二進制文件/音頻/圖片/視頻 |
模式 | 描述 |
---|---|
rt | 以只讀模式打開文本文件 |
wt | 可寫模式 ,清空文件後寫入 |
at | 可寫模式,追加文本內容 |
rb | 以只讀模式打開二進制文件 |
wb | 可寫模式 ,清空文件後寫入 |
ab | 可寫模式,追加文本內容 |
with open("filename","r",encondig="utf8") as f: print(f.read())
with open()方法不只提供自動釋放操做系統佔用的方法,而且with open能夠使用逗號分隔,一次性打開多個文件,實現文件的快速拷貝。操作系統
絕對路徑指針
從盤符開始寫一個完整的路徑code
相對路徑視頻
相對於當前執行文件所在的文件夾的文件。對象
模式 | 描述 |
---|---|
r+ | 可讀可寫 |
w+ | 可讀可寫 |
a+ | 可讀可寫 |
不能建議同時使用可讀可寫的模式進行對文件的操做圖片
一個字符 表示3個字節rem
一個英文字母表示1個字節it
打開文件模式要用二進制模式(b)
file = "36r.txt" # 文件內容以下 真帥qinyj 真帥
seek
兩個參數,表明文件指針的偏移量,偏移量的單位是字節個數
with open(file,"rb") as fr: fr.seek(3,0) # 控制指針到3字節後面開始讀後面的內容 print(fr.read().decode("utf8")) # 帥qinyj 真帥
tell
統計 從文件開頭到當前的指針所在位置
with open(file,"rb") as fr: # fr.seek(3,0) print(fr.read().decode("utf8")) print(fr.tell()) # 告訴當前文件的指針在哪裏,上一條代碼已經讀完全部的字符,因此是在文件末尾 真帥qinyj 真帥 18
truncate(n)
截斷文件
with open(file,"ab") as fr: fr.truncate(3) # 截斷幾個字節以後的全部字符 真
思路:
打開兩個文件;
讀第一個文件內容;
將讀到的內容寫入第二個文件中;
刪除第一個文件;
將第二個文件重命名爲第一個文件的名字。
import os with open("36r.txt","r",encoding="utf8") as fr,\ open("36r.txt.swap","a",encoding="utf8") as fw: data = fr.read() data = data.replace("真","真好真好qinyj") fw.write(data) fw.flush() os.remove("36r.txt") os.rename("36r.txt.swap","36r.txt") print("done....")
import os file = "36r.txt" with open(file,"r",encoding="utf8") as fr,\ open(file + ".swap","w",encoding="utf8") as fw: for i in fr: i = i.replace("你分變動六","dsfsfsdfsdggggggggggggggggggggggggggggggg") fw.write(i) os.remove(file) os.rename(file + ".swap",file)