python-13:文件操作 open
一、文件操作的流程:
filehand=open(filename,mode,encoding):encoding:表示的意思:告诉open函数,以encoding=‘xxx’方式解码,打开文件,encoding=‘xxx’就是文件存在硬盘上时所使用的编码方式,若无encoding=‘xxx’,windows默认用'gbk'解码,linux,用utf-8
#1. 打开文件,得到文件句柄并赋值给一个变量: f=open(filename,mode,encoding)
#2. 通过句柄对文件进行操作:f.read()
#3. 关闭文件:f.close()
具体步骤如下:
f=open('test.txt',encoding='utf-8') #打开文件
data=f.read() #文件操作
print(data)
f.close() #关闭文件
二、open()函数的具体用法:
open函数最常用的使用方法如下:文件句柄 = open('文件路径', '模式',编码方式)。
1、关于文件路径
#文件路径:主要有两种,一种是使用相对路径,想上面的例子就是使用相对路径。
#另外一种就是绝对路径,像' C:/Users/shu/Desktop/python/test.txt'
2、关于打开模式:
# r 以只读方式打开文件。这是默认模式。文件必须存在,不存在抛出错误
#rb 以二进制格式打开一个文件用于只读。b,bytes 方式不用指定编码,指定编码反而报错
#r+ 打开一个文件用于读写。文件指针将会放在文件的开头。读完就追加。
#w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
#w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
#a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
#a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
注:后面有带b的方式,不用指定编码方式。有带+号的,则可读可写,不过它们之间还是有区别的
三、关于编码方式:
#比如我们用pycharm写一个text文件,我们写的时候是用utf-8写入的,但是当我们在pycharm里面用open只读方式打开这个文件,如果没指定编码方式则会报错(pycharm默认的编码是utf-8),为什么呢?
因为open函数打开文件,是不会去看你编辑器的编码方式的,它是根据系统的编码方式来的。由于我系统是gbk所以它干的事情就是用gbk格式去读我用utf-8保存的文件。肯定会报错
四、关闭文件:
不要小看这一步,因为我们读取文件是把文科读取到内存中的,如果我们没关闭它,它就会一直占用系统资源,而且还可能导致其他不安全隐患。还有一种方法可以让我们不用去特意关注关闭文件。那就是 with open()
with open('test.txt','a+') as f:
f.write('作者:仓央嘉措')
print(f.read())
五 、补充
with open('test.txt','rb') as f:
data=f.read()
print(data)
print(data.decode('utf-8')) #需要decode将bytes原生形式转变为unicode形式
# 结果:
#b'hello\r\n2018\xe5\xb9\xb410\xe6\x9c\x8811\xe6\x97\xa5\r\n\xe4\xb8\xad\xe5\x9b\xbd*\xe5\x8c\x97\xe4\xba\xac\r\n'
# hello
# 2018年10月11日
# 中国*北京
with open('test1.txt','wb') as f:
f.write(bytes('hello,中国\n',encoding='utf8')) #以二进制形式写入文件
f.write('北京\n'.encode('utf-8'))#以二进制形式写入文件,
同时打开2个文件,一读一写
with open('t1','r') as f,open('t2','w') as s:
s.write(f.read())