

1 1、請分別介紹文件操作中不同的打開方式之間的區別: 2 3 模式 含義 4 r 文本只讀模式 5 rb 二進制模式 #這種方法,是用來傳輸或存儲,不給人看的。 6 r+ r+ 是讀寫模式,只要沾上r,文件必須存在 7 rb+ 二進制讀寫模式 8 w w 寫模式,它是不能讀的,如果用w模式打開一個已經存在的文件,會清空以前的文件內容,重新寫 9 wb 和wb 兩種模式 10 w+ w+ 是讀寫內容,只要沾上w,肯定會清空原來的文件 11 wb+ 二進制寫讀模式 12 a a 追加模式,也能寫,在文件的末尾添加內容 13 ab 二進制追 加模式 14 a+ 15 ab+ 16 '''
?
?
1.文件操作基本流程
#1. 打開文件,得到文件句柄并賦值給一個變量 f=open('a.txt','r',encoding='utf-8') #默認打開模式就為r#2. 通過句柄對文件進行操作 data=f.read()#3. 關閉文件 f.close()


護士主婦空姐老師聯系方式.txt1,文件路徑2,編碼方式:utf-8。3,動作mode,讀,讀寫,寫讀.....f1 = open('D:\空姐護士老師主婦.txt', encoding='utf-8', mode='r')content = f1.read()print(content)f1,文件句柄,文件對象,file,f_handle,file_handle,f_objopen打開的指令,windows的指令,windows 默認編碼方式gbk,linux默認編碼方式utf-8,mac utf-8。1,打開文件,產生文件句柄。2,操作文件句柄。3,關閉文件。 注意:SyntaxError: (unicode error) 'unicodeescape' codeccan't decode bytes in position 2-3: truncated \UXXXXXXXX escapef1 = open(r'D:\空姐護士老師主婦.txt', encoding='utf-8', mode='r')# f1 = open('D:\\空姐護士老師主婦.txt', encoding='utf-8', mode='r')EncodeDecodeErorr: 編碼錯誤。
調用文件的兩個小例子


#相對路徑下,不用寫路徑,可以直接寫文件名 # f1=open('123.py',encoding='utf-8',mode='r') #mode可以不寫,默認讀 # content=f1.read() #read全部讀出 # print(content) # f1.close() #絕對路徑下 # f1=open('F:\\Python自動化21期\\day03\\1.txt',encoding='utf-8') #注意路徑是\\,否則會報錯 # content=f1.read() # print(content) # f1.close()
2.文件打開模式
文件句柄 = open(‘文件路徑’,‘模式’)
rb模式 非文字類的文件的操作。不寫encoding
unicode ---> bytes encode()
bytes---> unicode decode()


1 #編碼的補充:\ 2 # s1 = b'\xd6\xd0\xb9\xfa' 3 # s2 = s1.decode('gbk') 4 # s3 = s2.encode('utf-8') 5 # print(s3) # b'\xe4\xb8\xad\xe5\x9b\xbd' 6 # s1 = b'\xd6\xd0\xb9\xfa'.decode('gbk').encode('utf-8') 簡化寫法 7 # print(s1)


#1. 打開文件的模式有(默認為文本模式): r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】 w,只寫模式【不可讀;不存在則創建;存在則清空內容】 a, 只追加寫模式【不可讀;不存在則創建;存在則只追加內容】#2. 對于非文本文件,我們只能使用b模式,"b"表示以字節的方式操作(而所有文件也都是以字節的形式存儲的,使用這種模式無需考慮文本文件的字符編碼、圖片文件的jgp格式、視頻文件的avi格式) rb wb ab 注:以b方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼#3,‘+’模式(就是增加了一個功能) r+, 讀寫【可讀,可寫】 w+,寫讀【可寫,可讀】 a+, 寫讀【可寫,可讀】#4,以bytes類型操作的讀寫,寫讀,寫讀模式 r+b, 讀寫【可讀,可寫】 w+b,寫讀【可寫,可讀】 a+b, 寫讀【可寫,可讀】
3.文件操作


read(3):1. 文件打開方式為文本模式時,代表讀取3個字符2. 文件打開方式為b模式時,代表讀取3個字節其余的文件內光標移動都是以字節為單位的如:seek,tell,truncate注意:1. seek有三種移動方式0,1,2,其中1和2必須在b模式下進行,但無論哪種模式,都是以bytes為單位移動的2. truncate是截斷文件,所以文件的打開方式必須可寫,但是不能用w或w+等方式打開,因為那樣直接清空文件了,所以truncate要在r+或a或a+等模式下測試效果。
?
1.read 全部讀取
read(n) 按照字符讀取
readline()按行讀取
readlines() 將每一行作為列表的一個元素并返回這個列表
for循環


# read 全部讀出 # f1 = open('log1', encoding='utf-8') # content = f1.read() # # print(content) # f1.close()#read(n) # f1 = open('log1', encoding='utf-8') # content = f1.read(5) # r 模式 按照字符讀取。 # print(content) # f1.close()# f1 = open('log1', mode='rb') # content = f1.read(3) # rb模式 按照字節讀取。utf-8編碼,寫4會報錯 # print(content.decode('utf-8')) # f1.close()#readline()按行讀取 # f1 = open('log1', encoding='utf-8') # print(f1.readline()) # print(f1.readline()) # print(f1.readline()) # print(f1.readline()) # f1.close()#readlines() 將每一行作為列表的一個元素并返回這個列表 # f1 = open('log1', encoding='utf-8') # print(f1.readlines()) # f1.close()#for循環 最好只占一行空間,直接read占用內存 # f1 = open('log1', encoding='utf-8') # for i in f1: # print(i) # f1.close()
#r+ 讀寫
#w模式 覆蓋之前的內容重新寫入輸入的內容
w+寫讀模式 清空之前內容寫入
a 追加寫


1 # r+讀寫 2 # f1=open('123.py',encoding='utf-8',mode='r+') 3 # print(f1.read()) 4 # f1.write('666') #在文件的最后一行后面寫入了666 5 # f1.close() 6 7 # f1=open('123.py',encoding='utf-8',mode='r+') 8 # f1.seek(0,2) #調至最后,按照字節去調整光標 9 # f1.write('777') 10 # f1.seek(0) #調整光標 不寫打印出內容為空! 11 # print(f1.read()) 12 # #光標 按照字節去運轉 seek 13 # f1.close() 14 15 #w模式 覆蓋之前的內容重新寫入輸入的內容 16 #w和wb區別????于非文本文件,我們只能使用b模式 17 # f1=open('123.py',encoding='utf-8',mode='w') 18 # f1.write('你真美,,') 19 # f1.close() 20 # f1=open('123.py',mode='wb') 21 # f1.write('1234567q釋放'.encode('utf-8')) 22 # f1.close() 23 24 # # w+寫讀模式 清空之前內容寫入 25 # f1=open('123.py',encoding='utf-8',mode='w+') 26 # print(f1.read()) #清空之前內容 27 # f1.write('666') #寫入 28 # f1.seek(0) #展示寫入的內容,加這兩行 29 # print(f1.read()) #展示寫入的內容,加這兩行 30 # f1.close() 31 32 #a 追加寫 ab 33 # f1=open('123.py',encoding='utf-8',mode='a') 34 # f1.write('1234') 35 # f1.close() 36 # ab????于非文本文件,我們只能使用b模式 37 #a+ 可以讀取 38 # f1=open('123.py',encoding='utf-8',mode='a') 39 # f1.write('lijie') 40 # f1.seek(0) 41 # print(f1.read()) 42 # f1.close()
2.其它操作方法


1 #其他操作方法: 2 #read read(n) readline() readlines() write() close 3 # readable??是否可讀 4 # writable??是否可寫 5 #tell 告訴指針的位置 6 # f1=open('123.py',encoding='utf-8',mode='w') 7 # f1.write('你真美1') 8 # print(f1.tell()) 9 # f1.close() 10 #seek(參數),seek(0,2) 調至最后 按照字節去調整光標 11 12 # 不手動關閉文件方法 with open() as: 13 # with open ('123.py',encoding='utf-8',mode='r') as f1,\ 14 # open ('2.py',encoding='utf-8',mode='w') as f2: #文件不存在時自動創建 15 # print(f1.read()) 16 # f2.write('234')
4.文件的改


1 #文件的改 2 #1,打開原文件,產生文件句柄。 3 #2,創建新文件,產生文件句柄。 4 #3,讀取原文件,進行修改,寫入新文件。 5 #4,將原文件刪除。 6 #5,新文件重命名原文件。 7 8 # import os 9 # with open('file_test', encoding='utf-8') as f1,\ 10 # open('file_test.bak', encoding='utf-8', mode='w') as f2: 11 # old_content = f1.read()#此方法全部讀取,不好 12 # new_content = old_content.replace('alex','SB') 13 # f2.write(new_content) 14 # os.remove('file_test') 15 # os.rename('file_test.bak','file_test') 16 17 18 import os 19 with open('file_test', encoding='utf-8') as f1,\ 20 open('file_test.bak', encoding='utf-8', mode='w') as f2: 21 for line in f1: #for循環未結束一直在持續寫,所以不覆蓋 22 new_line = line.replace('SB','alex') 23 f2.write(new_line) 24 os.remove('file_test') 25 os.rename('file_test.bak','file_test')
?5.復習


1 # 文件操作 2 # 打開文件 3 # f = open('文件路徑') 默認的打開方式r ,默認的打開編碼是操作系統的默認編碼 4 # r w a (r+ w+ a+) 以上6種加b ,如果打開模式+b,就不需要指定編碼了 5 # 編碼 UTF-8 ,gbk 6 # 操作文件 7 # 讀 8 # read 不傳參數 意味著讀所有 9 # 傳參,如果是r方式打開的,參數指的是讀多少個字符 10 # 傳參,如果是rb方式打開的,參數指的是讀多少個字節 11 # readline 12 # 一行一行讀 每次只讀一行,不會自動停止 13 # for循環的方式 14 # 一行一行讀 從第一行開始 每次讀一行 讀到沒有之后就停止 15 # 寫 16 # write 寫內容 17 # 關閉文件 18 # f.close() 19 # with open() as f: 20 # 修改文件 : 21 # import os 22 # os.remove 23 # os.rename
?