如今我通常都是直接用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) #指向开头