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())

posted @ 2018-10-11 19:01  优雅的代码  阅读(437)  评论(0编辑  收藏  举报