1. 文件操作
ps: 帶b類型的用于非文字文件的傳輸等操作
不帶b的通常用r+,包含了讀寫,追加的功能
1. 只讀 r
1 # 絕對路徑 2 a = open('d:\czt.txt',mode = 'r',encoding = 'utf-8') 3 content = a.read() 4 print(content) #唐雨軒是大臭屁 5 a.close() 6 7 # 讀 8 # 1.r 相當于把bytes類型轉化為str類型 9 b = open('0801.txt',mode = 'r',encoding = 'utf-8') 10 content1 = b.read() 11 print(content1,type(content)) #唐雨軒是無敵大臭屁 <class 'str'> 12 b.close() 13 14 # 2.rb bytes類型的只讀 可用于非文字的文件操作 15 c = open('0801.txt',mode = 'rb') #這里就不需要編碼方式 16 content2 = c.read() 17 print(content2) #bytes類型的輸出 18 c.close()
2. 只寫 w
1 # 寫 2 # 對于w:沒有此文件就會創建文件 3 a = open('0802.txt',mode = 'w',encoding = 'utf-8') 4 a.write('武漢加油') 5 a.close() 6 7 # 1.w 先將源文件的內容全部清除,在寫。 8 b = open('0802.txt',mode = 'w',encoding = 'utf-8') 9 b.write('希望疫情早日過去') 10 b.close() 11 12 # 2.wb 以bytes類型輸入 13 c = open('0802.txt',mode = 'wb') 14 c.write('希望疫情早日過去'.encode('utf-8')) #將bytes類型轉化為str類型 15 c.close()
3. 追加 a
1 # 追加 2 # 在源文件的基礎上進行修改 3 # 1. a 4 a = open('0802.txt',mode='a',encoding='utf-8') 5 a.write('加油') 6 a.close() 7 8 # 2. ab 以bytes類型進行追加 9 b = open('0802.txt',mode='ab') 10 b.write('加油'.encode('utf-8')) 11 b.close()
4. 讀寫 r+
1 # 讀寫 先讀再寫,只能進行一次操作 2 # 1. r+ 3 # 源文件:希望疫情早日過去 4 a = open('0802.txt',mode = 'r+',encoding = 'utf-8') 5 print(a.read()) #希望疫情早日過去 6 a.write('加油') #文件變成:希望疫情早日過去 加油 7 print(a.read()) #此時不能再讀出來,因為只能進行讀寫我一次操作 8 a.close() 9 10 # 若先寫后讀,則初始光標在前面,會把前幾位覆蓋,讀出未被覆蓋的內容 11 # 若全占完則什么都不打印 12 b = open('0802.txt',mode = 'r+',encoding = 'utf-8') 13 b.write('加油') #文件變為:加油疫情早日過去 14 print(b.read()) #疫情早日過去 打印未被覆蓋的部分 15 b.close() 16 17 # 2. r+b bytes類型的讀寫 18 c = open('0802.txt',mode = 'r+b') 19 print(c.read()) #b'\xe5\xb8\x8c\xe6\x9c\x9b\xe7\x96\xab\xe6\x83\x85\xe6\x97\xa9\xe6\x97\xa5\xe8\xbf\x87\xe5\x8e\xbb\n' 20 c.write('加油'.encode('utf-8')) #文件變成:希望疫情早日過去 加油 21 c.close()
5. 寫讀 w+
1 # 寫讀 先寫再讀,只能進行一次操作 2 # 與w類似,先全部清除在寫入 3 # 1. w+ 4 a = open('0802.txt',mode = 'w+',encoding = 'utf-8') 5 a.write('aaa') #文件變為:aaa 6 print(a.read()) #什么都不會讀出 7 a.close() 8 9 # 改進方法 10 b = open('0802.txt',mode = 'w+',encoding = 'utf-8') 11 b.write('bbb') #文件變為:bbb 12 b.seek(0) #移動光標至文檔首 13 print(b.read()) #bbb 14 b.close() 15 16 # 2. w+b bytes類型的寫讀 17 c = open('0802.txt',mode = 'w+b') 18 c.write('ccc'.encode('utf-8')) #文件變為:ccc 19 print(c.read()) #b'' 20 c.close()
6. 追加讀 a+ 類似于寫讀
1 # 1. a+ 2 # 類似于寫讀 3 # 源文件: ccc 4 a = open('0802.txt',mode = 'a+',encoding = 'utf-8') 5 a.write('aaa') #文件變為:cccaaa 6 a.seek(0) #移動光標到文檔首,否則無法讀出 7 print(a.read()) #cccaaa 8 a.close() 9 10 # 2. a+b bytes類型的
7. 功能詳解
1 # utf-8編碼 2 # 一個中文字符,三個字節;一個英文字符,一個字節 3 # 源文件:野狗愛吃香蕉 4 a = open('0802.txt',mode = 'r+',encoding = 'utf-8') 5 print(a.read(3)) #野狗愛 6 a.seek(3) #移動光標 7 print(a.tell()) #告訴你光標的位置 3 8 print(a.read()) #狗愛吃香蕉 9 a.close() 10 # ps: a.read(3) 讀出來按照字符 11 # a.seek(3) 定光標按照字節 12 13 # 可通過調節光標位置來選擇讀什么內容 14 # 源文件:野狗愛吃香蕉 15 b = open('0802.txt',mode = 'w+',encoding = 'utf-8') 16 b.write('野狗愛吃香蕉') 17 count = b.tell() 18 b.seek(count - 9) #定光標到9個字節前,中文對應3個字符 19 print(b.read()) #吃香蕉 20 b.close() 21 # 實現了打印最后三個字 22 23 # 其它功能介紹 24 # 源文件:野狗愛吃香蕉 25 # 吃香蕉 26 c = open('0802.txt',mode = 'r+',encoding = 'utf-8') 27 print(c.readable()) #True 是否可讀,還有writeable等 28 print(c.readline()) #野狗愛吃香蕉 一行一行地讀 29 print(c.readlines()) #['吃香蕉\n'] 每一行當成列表中的一個元素,添加到list中 30 c.truncate(3) #文件變為野 截取,截取前幾個字節 31 c.close()
1 # with as 打開文件 不需要close(),并且可以同時打開多個文件 2 # 源文件:野狗愛吃香蕉 3 with open('0802.txt',mode = 'r+',encoding = 'utf-8') as a,\ 4 open('0802.txt',mode = 'a+',encoding = 'utf-8') as b: 5 print(a.read()) #野狗愛吃香蕉 6 print(b.read()) #啥都沒
浙公網安備 33010602011771號