一文带你掌握Python文件打开模式
Python文件处理功能颇为便捷流畅,仅需运用open函数便可轻松实现文件的生成或者信息读取过程。然而,对于初学者而言,困扰他们最大的难题也许在于其多样化的打开模式。乍一看各类文件格式众多,着实令人眼花缭乱、无从入手。实际上,尽管此类情况看似复杂,却可归纳出如下几大要点,而各类文件打开模式皆是由这些要点交叉组合所构成:
- r: 表示 read,其含义表示读取,如果只有其一个字母则表示只读,且文件指针在文件开头位置,也就是会读取文件所有内容,同时也是 open 默认的模式,文件不存在会报错。
- w:表示 write,表示写入,且指针在文件头,这意味着如果单独使用 w 模式,则会覆盖已存在文件,文件不存在则创建。
- a: 表示 append,表示追加,所以,对于一个已经存在的文件,使用追加模式,会将指针移动到文件末尾,新的内容会被写到已有内容之后,文件不存在会创建,单独使用a 模式只能写,不能读。
- b:表示 blob,其表示二进制内容,不能单独使用,其作用是为了表示 r 或 w 两种类型方式,常用来读写音视频等二进制文件。
- +:表示读写模式,不能单独使用,需要配合 r,w,a 一起表示文件可读可写,但是需要注意文件指针位置的问题。
需要注意的是,r, w, a 三种模式不能彼此组合,如果需要进行读写操作,需要使用 r+, a+,w+ 等操作,操作二进制再加字母 b。
所以现在就可以轻松解读以下操作组合(示例):
rb:以二进制只读方式打开文件,且指针在开头。
wb:以二进制写入,文件存在则覆盖,不存在则写入。
ab+:以二进制追加文件内容,指针在文件尾。
rb+: 可读写二进制内容
r+: 可读可写,指针在文件头
差异对比
- 现在虽然可以轻松阅读和组装读写模式,但是不同的组合还有一些差异需要仔细甄别。
r+:读写文件,但是不会创建文件,写内容时,如果存在内容会被覆盖
w+:新建文件,但是文件存在内容时会清空文件
a+:同 r+,可读写文件,但是需要注意的是,a+的时候指针在末尾,所以不会清空内容,但是如果直接读取也会为空,如果需要读取已有文件需要使用 seek 方法调整指针的位置。
- 文件不存在会创建文件的模式: a, a+, w, w+
- 文件在操作完成后一定要记得 close 关闭,使用 with 方式的可以忽略, 否则可能会导致内容丢失。
- 写完的内容,如果立马需要读取,需要调用 flush,否则可能会导致,读写内容不一致的情况。