Python檔案讀寫之r+/w+/a+
阿新 • • 發佈:2018-11-26
讀模式 | r | 開啟不存在的檔案會報錯、不能寫;如不指定模式則預設是r |
寫模式 | w | 開啟不存在的檔案會,會新建一個檔案;開啟存在的檔案會先清空後覆蓋原有檔案;不能讀 |
追加模式 | a | 開啟不存在的檔案會,會新建一個檔案;不能讀 |
讀寫模式 | r+ | 能寫,開啟不存在的檔案會報錯 |
寫讀模式 | w+ | 能讀,但是讀不到內容,因為w先把檔案內容清空了 |
追加讀模式 | a+ | 能讀,但讀不到內容,因為檔案指標預設在最後一行,可用seek移動檔案指標位置 |
1. r+讀寫模式
# r+讀寫模式 f=open('test.txt','r+') res=f.write('000\n') res1=f.read() print(res1) # 原test.txt內容如下: # 123456 # 678 # 789 #print輸出讀取的內容如下: # 6 # 678 # 789 #現test.txt內容如下: # 000 # 6 # 678 # 789 ##解釋說明: #1. r+新寫入的內容會覆蓋原檔案中的內容,寫入幾個字元,則覆蓋幾個字元 #2. r+會從檔案開頭開始進行檔案讀寫,所以每次寫入時,都會從一開始(第一行)進行 #3. \n換行符相當於兩個字元 #4. r+寫完後,檔案指標會停留在新寫入的字元後面,所以在read時,只read新寫入字元後面的那些內容 #5. 綜上所述,新寫入的000\n會覆蓋原檔案中的前5個字元,且read後顯示的內容不包含新寫入的內容
2. w+寫讀模式
# w+寫讀模式 f=open('test.txt','w+') res=f.write('000\n') res1=f.read() print(res1) # 原test.txt內容如下: # 123456 # 678 # 789 #print輸出讀取的內容如下:#空,能讀,但是讀不到內容,因為w+先把檔案內容清空了 #現test.txt內容如下: # 000 # ##解釋說明: #1. w+會先清空然後覆蓋原檔案內容 #2. w+會先將檔案裡的所有內容都清空,所以讀不到任何內容
3. a+追加讀模式
# a+讀寫模式 f=open('test.txt','a+') res=f.write('000\n') res1=f.read() print(res1) # 原test.txt內容如下: # 123456 # 678 # 789 #print輸出讀取的內容如下:#空,能讀,但讀不到內容,因為檔案指標預設在最後一行,用seek移動檔案指標位置 #現test.txt內容如下: # 123456 # 678 # 78900 # ##解釋說明: #1. a+因為檔案指標預設在最後一行字元後,所以寫入新字元時,新寫入的字元會顯示在最後 #2. a+能讀,但因為檔案指標預設在最後一行,所以讀不到內容,顯示空 #3. a+可以用seek()移動檔案指標位置進行檔案的讀取
3-1:a+中seek()的運用:在讀取檔案時,可指定下標從而實現從第幾位開始讀取檔案內容;
注:只針對讀取檔案,寫檔案還是隻能從最後開始寫
f=open('test.txt','a+') f.seek(5) #此處的seek不起作用,因為對寫檔案不起作用 res=f.write('hh\n') f.seek(2) #從下標是2的字元開始讀取檔案 res1=f.read() print(res1) # 原test.txt內容如下: # 123456 # 678 # 789 #print輸出讀取的內容如下: # 3456 # 678 # 789hh # #現test.txt內容如下: # 123456 # 678 # 789hh #