04文件操作2(打开模式)
文件操作之打开模式
1、普通打开模式
1)r,英文:read,只读模式(默认)
2)w,英文:write,只写模式(不可读,不存在则创建新文件,存在则删除内容)
3)a,英文:append,追加模式(不可读,不存在则创建,存在则只追加内容
# r(读) filename = 'data\\programming.txt' f = open(filename,'r') print(f.read()) f.write('nihao') f.close()
I love programming. I love creating new games. I also love finding meaning in large datasets. I love creating apps that can run in a browser.
--------------------------------------------------------------------------- UnsupportedOperation Traceback (most recent call last) <ipython-input-4-08974b0db28e> in <module> 3 f = open(filename,'r') 4 print(f.read()) ----> 5f.write('nihao') 6 f.close() UnsupportedOperation: not writable
注:读操作,只能是只读,不能写和追加
In [7]:# w(写) f = open(filename,'w') f.write('nihaowohao') f.close()
programming.txt
nihaowohao
注:写操作只能写,不能读和追加,而且写操作会重新创建一个文件,会覆盖之前的文件
In [8]:# a(追加) f = open(filename,'a') f.write('caishizhenhao') f.close()
programming.txt
nihaowohaocaishizhenhao
注:追加模式不可读,不存在则创建,存在则只追加内容
2、同时读写模式
1)r+,可读写文件(可读;可写;可追加,不存在文件则报错)
2)w+,可写读文件(可读,可写,创建新文件)
3)a+,可追加和读文件(可读,可追加,不存在则创建)
# r+(读写) f = open(filename, 'r+', encoding='utf-8') # utf-8 才支持中文 print(f.readline()) print(f.tell()) f.write('帅帅帅') f.seek(0) # 光标指针退到最开始的位置 print(f.readline()) f.close()
nihaowohaocaishizhenhao 23 nihaowohaocaishizhenhao帅帅帅In [27]:
# (写读) # 写读的功能是:创建新文件->写入文本->设置指针为开始位置(seek(0))->读取到文件内容 f = open(filename,"w+",encoding="utf-8") print(f.read()) f.write("qigao zui lang") f.seek(0) print(f.read()) print(f.tell()) f.write("qigao zui lang\n") f.seek(0) print(f.read()) f.close()
qigao zui lang 14 qigao zui langqigao zui langIn [29]:
# a+(追加和读) # 追加和读:追加读在写入文件时,不会清空之前的内容,而是在之前的内容的追加一行,读取文件内容,需要重新设置指针 f = open(filename, "a+", encoding="utf-8") print("--------data1-----") print(f.read()) #没有设置指针 print("--------data2-----") f.seek(0) print(f.read()) #设置指针 f.write("qigao zui lang") print("---------data3----") print(f.read()) #写完以后没有设置指针 print("--------data4-----") f.seek(0) print(f.read()) #写完以后设置指针 f.close()
--------data1----- --------data2----- qigao zui langqigao zui lang ---------data3---- --------data4----- qigao zui langqigao zui lang qigao zui lang
3、二进制打开模式
1)rb,二进制读
2)wb,二进制写
3)ab,二进制追加
这种打开模式就要注意了,这种是以二进制操作的,也就是说不管是是读,写,追加,都必须是二进制文件,也就是字节,而不是字符,需要解码以后才会生成字符。一般情况下跨平台的文件,视频文件等需要二进制模式操作。
# f = open(filename,'r+') # print(f.read()) #二进制读取 f = open(filename, "rb") f_read = f.read() f_read # 没有解码,读出来的是二进制,也就是字节码Out[60]:
b'qigao zui langqigao zui lan\r\n'In [63]:
f_read.decode() # 解码后,是字符Out[63]:
'qigao zui langqigao zui lan\r\n'In [76]:
# wb(二进制写) f = open(filename, 'wb') str = '我最帅' en_str = str.encode() # 写入文件,就需要编码,否则就会报错 f.write(en_str) f.close()In [77]:
f=open(filename,'r',encoding='utf-8') print(f.read()) f.close()
In [78]:
我最帅
# ab(二进制追加) f = open(filename, "ab") in_str = "gaoge,shuai de yibi" # 这边需要先编码,才能追加到文件中 in_str = in_str.encode() f.write(in_str) f.close()In [79]:
f = open(filename,'r',encoding='utf-8') print(f.read()) f.close()
我最帅gaoge,shuai de yibi
总结:
普通打开模式和二进制打开模式,只是在python 3中,二进制打开模式才做了字符和字节的编码和解码;然而在python 2中,字节和字符没有做明显的区别,所以在python 2中,二进制模式读取文件时,不需要做编码和转码的操作。

更多精彩