1、普通打开模式
1)r,英文:read,只读模式(默认)
2)w,英文:write,只写模式(不可读,不存在则创建新文件,存在则删除内容)
3)a,英文:append,追加模式(不可读,不存在则创建,存在则只追加内容
In [4]:
# r(读)
filename = 'data\programming.txt'
f = open(filename,'r')
print(f.read())
f.write('nihao')
f.close()
注:读操作,只能是只读,不能写和追加
In [7]:
# w(写)
f = open(filename,'w')
f.write('nihaowohao')
f.close()
In [8]:
# a(追加)
f = open(filename,'a')
f.write('caishizhenhao')
f.close()
In [19]:
# 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()
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
")
f.seek(0)
print(f.read())
f.close()
In [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()
In [60]:
# f = open(filename,'r+')
# print(f.read())
#二进制读取
f = open(filename, "rb")
f_read = f.read()
f_read # 没有解码,读出来的是二进制,也就是字节码
Out[60]:
In [63]:
f_read.decode() # 解码后,是字符
Out[63]:
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()
总结:
普通打开模式和二进制打开模式,只是在python 3中,二进制打开模式才做了字符和字节的编码和解码;然而在python 2中,字节和字符没有做明显的区别,所以在python 2中,二进制模式读取文件时,不需要做编码和转码的操作。