现在我一般都是直接用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) #指向开头