如今我通常都是直接用with open比較保險:函數
with open("test.txt","r","utf-8") as f:spa
# 爲a+模式時,由於爲追加模式,指針已經移到文尾,讀出來的是一個空字符串。ftext指針
= f.read()# 一次性讀所有成一個字符串ftextlist = f.readlines()# 也是一次性讀所有,但每一行做爲一個子句存入一個列表blog
w新建只寫,w+新建讀寫,兩者都會將文件內容清零utf-8
r讀打開,r+讀寫打開字符串
**w+,r+與a+區別:it
r+:可讀可寫,若文件不存在,報錯, 進行了覆蓋寫;io
w+: 可讀可寫,若文件不存在,建立,進行了清空寫;class
a+:可讀可寫但光標在最後面(而後讀到最後面,因此讀到空字符串),若文件不存在,建立,進行了追加寫;test
下圖爲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) #指向開頭