對于open()的這三個參數(shù)的不同點,我用python3做了文件寫入測試,使它更直觀傻盟。
使用file:sample.txt做測試速蕊。
1、r+演示:
(1)娘赴、打開演示
>>> f = open("sample.txt", "r+") # r+打開
>>> f.read() #讀取內(nèi)容
"To all the people out there.\nI say I don't like my hair.\nI need to shave it off."
>>> f.close() #關(guān)閉文件
(2)规哲、寫入演示
>>> f = open("sample.txt", "r+") # r+打開
>>> f.write("this is a test") #測試寫入"this is a test"
14 # 自動返回寫入字符的長度
>>> f.read() #讀取剩余內(nèi)容,可以看到少了"To all the peo"
"ple out there.\nI say I don't like my hair.\nI need to shave it off."
>>> f.seek(0) # 指針調(diào)回開頭
0
>>> f.read() #讀取內(nèi)容看到"this is a test"在開頭
"this is a testple out there.\nI say I don't like my hair.\nI need to shave it off."
r+:“r”為只讀不可寫诽表,“+”為可讀可寫唉锌,“r+”打開一個文件用于讀寫。文件指針將會放在文件的開頭竿奏,然后指針隨著寫入移動袄简。
2、a+演示:
(1)泛啸、打開演示
>>> f = open("sample.txt", "a+") # a+打開
>>> f.read() #內(nèi)容如下绿语,因為追加模式指針放在最末尾,所有沒有內(nèi)容
''
>>> f.close() #關(guān)閉
(2)候址、寫入演示
>>> f = open("sample.txt", "a+") # a+打開
>>> f.write("this is a test")
14 # 自動返回寫入字符的長度
>>> f.read()
'' # 指針隨著寫入還是在文件末尾吕粹,所以無輸出
>>> f.seek(0) # 指針調(diào)回開頭
>>> f.read() #內(nèi)容如下
"To all the people out there.\nI say I don't like my hair.\nI need to shave it off.this is a test"
a+:“a”為只可追加不可讀,“+”為可讀可寫岗仑,“a+”打開一個文件用于讀寫匹耕,如果該文件已存在,文件指針將會放在文件的結(jié)尾荠雕,且文件打開時會是追加模式稳其。如果該文件不存在,會創(chuàng)建新文件用于讀寫舞虱。
3欢际、w+演示:
(1)、打開演示
>>> f = open("sample.txt", "w+") # w+打開
>>> f.read() #內(nèi)容如下矾兜,文件內(nèi)容被直接刪除了
''
>>> f.seek(0) # 指針調(diào)回開頭
0
>>> f.read() # 還是沒有內(nèi)容
''
(2)损趋、寫入演示
>>> f = open("sample.txt", "w+") # w+打開
>>> f.write("this is a test") # 寫入
14
>>> f.seek(0) # 指針調(diào)回開頭
>>> f.read() # 讀取全部內(nèi)容
'this is a test'
w+:“w”為只可寫不可讀,“+”為可讀可寫椅寺,“w+”打開一個文件用于讀寫浑槽。如果該文件已存在則打開文件,原有內(nèi)容會被刪除返帕。如果該文件不存在桐玻,創(chuàng)建新文件。是常用的打開方式荆萤。
4镊靴、關(guān)于是否可以創(chuàng)建新文件铣卡,嘗試創(chuàng)建"test.txt":
>>> f = open("test.txt", "r+") #r+不可以
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
>>> f = open("test.txt", "w+") #w+可以
>>> f = open("test.txt", "a+") #a+可以
5、總結(jié)~~
1偏竟、當你需要只讀的時候選r(默認值煮落,可不寫);
2踊谋、當r只讀不夠蝉仇,你有寫入需求,希望增加一個寫入功能殖蚕,就有了r+轿衔,指針定位是在開頭,等于這個文件你是需要的睦疫,然后邊讀可以邊改害驹。
3、但可能你是需要自動創(chuàng)建一個新文件寫入笼痛,而不是提前創(chuàng)建在走程序那么麻煩裙秋,或者之前得文件不對,你需要覆蓋寫入正確內(nèi)容缨伊,還省得取刪除錯誤得文件摘刑,所以你選擇w,但w不能讀刻坊,于是有w+枷恕,增加了可讀功能。
4谭胚、同理徐块,有些文件你希望直接定位到末尾,追加內(nèi)容灾而,于是有了a胡控,再增加可讀功能,于是有了a+