文件操作之打开模式
一、概述
之前的博客中只是简单介绍了文件操作中,打开模式,今天需要详细的介绍一下文件的打开模式
二、打开模式
1、普通打开模式
- r,英文:read,只读模式(默认)
- w,英文:write,只写模式(不可读,不存在则创建新文件,存在则删除内容)
- a,英文:append,追加模式(不可读,不存在则创建,存在则只追加内容
普通模式不论是读、写或者追加,都是按照字符来操作的,所以在操作过程中不需要进行编码(encode)和解码(decode)的动作。
说道这里有些童鞋觉得,我还不懂字符和字节的区别,或者说什么是编码和解码,请:猛击这里
①r(读)
注:读操作,只能是只读,不能写和追加
②w(写)
注:写操作只能写,不能读和追加,而且写操作会重新创建一个文件,会覆盖之前的文件
③a(追加)
注:追加模式不可读,不存在则创建,存在则只追加内容
2、同时读写模式
- r+,可读写文件(可读;可写;可追加,不存在文件则报错)
- w+,可写读文件(可读,可写,创建新文件)
- a+,可追加和读文件(可读,可追加,不存在则创建)
①r+(读写)
代码如下:
f = open("yesterday2","r+",encoding="utf-8") print(f.readline()) #获取指针的位置 print(f.tell()) #写入文件 f.write("\n高高最帅。。") #输入 Somehow, it seems the love I knew was always the most destructive kind #读取文件 72 #指针位置
写入结果,如图:
这个说明什么呐,就是说,不管指针在什么位置,依然在文件内容的最后添加写入的内容
②w+(写读)
写读的功能是:创建新文件->写入文本->设置指针为开始位置(seek(0))->读取到文件内容
代码如下:
f = open("yesterday2","w+",encoding="utf-8") print(f.read()) f.write("qigao zui lang\n") f.seek(0) print(f.read()) print(f.tell()) f.write("qigao zui lang\n") f.seek(0) print(f.read()) #输出 #第1次读的内容 #第二次读取的内容 qigao zui lang #指针位置 16 #第三次读取的内容 qigao zui lang qigao zui lang
写入文件的内容如下:
注:
- 写读功能,写入的行数不会收指针位置的控制,就是说不管指针在什么位置,依然写入的还是最后一行。
- 就是说写读功能是先创建一个文件,所以第一次读的时候,文件内容为空,但是当你写入内容时,需要从开始读取文件内容的话,或者在某个位置之后的内容的话,需要设置指针位置,否则读取不到内容,代码如下:
f = open("yesterday2","w+",encoding="utf-8") f.write("qigao zui lang\n") print("-----不设指针位置-----") print(f.read()) f.write("qigao zui lang\n") print("-----设置指针位置-------") f.seek(0) print(f.read()) #输出 -----不设指针位置----- -----设置指针位置------- qigao zui lang qigao zui lang
③a+(追加和读)
追加和读:追加读在写入文件时,不会清空之前的内容,而是在之前的内容的追加一行,读取文件内容,需要重新设置指针
f = open("yesterday2","a+",encoding="utf-8") print("--------data1-----") print(f.read()) #没有设置指针 print("--------data2-----") f.seek(0) print(f.read()) #设置指针 f.write("qigao zui lang\n") print("---------data3----") print(f.read()) #写完以后没有设置指针 print("--------data4-----") f.seek(0) print(f.read()) #写完以后设置指针 f.close() #输出 --------data1----- --------data2----- And only now I'm left alone to end the play, yeah qigao zui lang qigao zui lang ---------data3---- --------data4----- And only now I'm left alone to end the play, yeah qigao zui lang qigao zui lang qigao zui lang
注:在追加内容以后,读取文件时,需要重新设置指针的位置读取文件,不管指针的位置在哪里,写入的都是追加在文件的最后一行
3、二进制打开模式
- rb,二进制读
- wb,二进制写
- ab,二进制追加
这种打开模式就要注意了,这种是以二进制操作的,也就是说不管是是读,写,追加,都必须是二进制文件,也就是字节,而不是字符,需要解码以后才会生成字符。一般情况下跨平台的文件,视频文件等需要二进制模式 操作
①rb(二进制读)
#二进制读取 f = open("yesterday2","rb") f_read = f.read() print(f_read) #解码 print(f_read.decode()) #输出 #没有解码,读出来的是二进制,也就是字节码 b'Somehow, it seems the love I knew was always the most destructive kind' #解码后,是字符 Somehow, it seems the love I knew was always the most destructive kind
②wb(二进制写)
f = open("yesterday2","wb") in_str = "小高最帅" #这边写入文件,就需要编码,否则就会报错 in_str = in_str.encode() f.write(in_str) f.close()
③ab(二进制追加)
f = open("yesterday2","ab") in_str = "gaoge,shuai de yibi" #这边需要先编码,才能追加到文件中 in_str = in_str.encode() f.write(in_str) f.close()
总结:
普通打开模式和二进制打开模式,只是在python 3中,二进制打开模式才做了字符和字节的编码和解码;然而在python 2中,字节和字符没有做明显的区别,所以在python 2中,二进制模式读取文件时,不需要做编码和转码的操作。