r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

r+ 打开一个文件用于读写。文件指针将会放在文件的开头。

w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

模式虽然很多,但常用的只有前5种,学会这5种,其余的,也就融会贯通了。

这两个模式都是写文件时用的模式,不同之处在于,w是以文本文件格式打开文件进行写, wb模式是以二进制格式打开文件进行写操作那么他们之间的区别是什么呢,下面用一段代码来说明

区别只有一处,如果是以wb模式打开,使用write方法时,只能传入bytes类型的数据,因此需要使用encode方法先将str转成bytes类型数据。

既然他们没有区别,有何必弄出两个来呢? 原来有些数据,本身就是二进制的,而且不能也务必要转成字符串类型,那么这种数据写入文件就需要以wb的模式打开文件,下面就是一个具体的例子

上面的代码里,将stu对象序列化到文件中,这种场景下,就需要以wb模式打开文件。

我这里之所以用图片,是因为如果将这段文字复制到我的编辑器中,有一部分无法显示。

使用w模式时,如果文件已经存在,那么再次打开后,文件里原有的内容就会消失,因为打开后,文件指针指向了文件开始的地方,写数据就会从这里写。