文件操作(open\read\write\close)

时间:2021-12-26 19:07:59

为了方便演示,我们建立了一个示范文本,如下所示:

hello,我是代码螺丝钉
test1
test2
test3

文件的读


 

f = open("示范文本","r")   #打开文件,获取句柄
v1 = f.read()     #通过句柄进行读操作
print(v1) #打印结果为nicodeDecodeError: 'gbk' codec can't decode byte,报错了
f.close()   #关闭文件

以上程序报错了,原因是因为示范文本这个文件的编码格式是utf-8,而open这个函数解码默认为系统的解码,我们操作系统默认为GBK编码,以下进行解决

f = open("示范文本","r",encoding="utf-8")   #打开文件,获取句柄,设置以utf-8解码
v1 = f.read()     #通过句柄进行读操作
print(v1) 
#打印结果为
# hello,我是代码螺丝钉
# test1
# test2
# test3
f.close()   #关闭文件

如上所示,加入encoding=“utf-8”后可以解决解码错误的问题,如果我们想要读取一行如何做呢,答案是使用readline()

f = open("示范文本","r",encoding="utf-8")   #打开文件,获取句柄,设置以utf-8解码
print(f.readline(),end="")  #读取一行,end =""代表忽略回车,要不然打印会多打印一行空行
print(f.readline(),end="")
print(f.readline(),end="")
print(f.readline(),end="")
print(f.readline(),end="")
f.close()   #关闭文件
#打印结果为
# hello,我是代码螺丝钉
# test1
# test2
# test3

还有一个函数为readlines(),下面来演示其效果

f = open("示范文本","r",encoding="utf-8")   #打开文件,获取句柄,设置以utf-8解码
print(f.readlines())  #读取结果,最后存入一个列表中,每个元素代表一行
f.close()   #关闭文件
#打印结果为['hello,我是代码螺丝钉\n', 'test1\n', 'test2\n', 'test3']

以上发现上面代码的效果就是读取所有行,然后建立一个列表,每一行的内容作为列表的一个元素

文件的写


 

文件的写可以完全类比文件的读,以下是示例代码

f = open("示范文本","w",encoding="utf-8")   #打开文件,获取句柄,设置以utf-8解码
f.writelines(["1111","2222\n,3333\n"])   #传入列表,一次写多行
f.write("4444\n5555\n")
f.close()

最后写出来的文本如下所示

11112222
,3333
4444
5555

文件的其他模式


 

  • a   追加模式,不会覆盖文件,而是写到文件最后
  • r+   可读写模式,写操作默认从文件开头开始写

如何不用自己手动close,而让操作系统自己帮我们取关闭文件呢,答案是使用with关键字

with open("示范文本","w",encoding="utf-8") as f:
     f.write("4444\n5555\n")