現在我一般都是直接用with open比較保險:
with open("test.txt","r","utf-8") as f:
# 為a+模式時,因為為追加模式,指針已經移到文尾,讀出來的是一個空字符串。ftext
= f.read()# 一次性讀全部成一個字符串ftextlist = f.readlines()# 也是一次性讀全部,但每一行作為一個子句存入一個列表
w新建只寫,w+新建讀寫,二者都會將文件內容清零
r讀打開,r+讀寫打開
**w+,r+與a+區別:
r+:可讀可寫,若文件不存在,報錯, 進行了覆蓋寫;
w+: 可讀可寫,若文件不存在,創建,進行了清空寫;
a+:可讀可寫但光標在最后面(然后讀到最后面,所以讀到空字符串),若文件不存在,創建,進行了追加寫;
下圖為r+模式下的覆蓋寫

不可讀的打開方式:w和a
若不存在會創建新文件的打開方式:a,a+,w,w+
a 模式不能用來讀,即使用f.read()等會報錯。
然后記一下下面幾種方法:
F.read([size]) #size為讀取的長度,以byte為單位
F.readline([size])
#讀一行,如果定義了size,有可能返回的只是一行的一部分
F.readlines([size])
#把文件每一行作為一個list的一個成員,並返回這個list。其實它的內部是通過循環調用readline()來實現的。如果提供size參數,size是表示讀取內容的總長,也就是說可能只讀到文件的一部分。
F.write(str) # 寫入一句,要換行的話可以加上"\n"
#把str寫到文件中,write()並不會在str后加上一個換行符
F.writelines(seq) # 寫入多行
#把seq的內容全部寫到文件中。這個函數也只是忠實地寫入,不會在每行后面加上任何東西。
另:調用seek方法可以把指針指向想要的位置:如 f.seek(0) #指向開頭