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())    #啥都沒