Python 文件打开模式总结
若指定的文件不存在,则以哪种方法打开文件会报异常。( )
A.a
B.a+
C.r+
D.w+
| 模式 | 完整写法 | 文件不存在时 | 文件已存在时 | 写入位置 | 读/写权限 | 对原内容的处理 |
|---|---|---|---|---|---|---|
| r | open('file', 'r') | 报错FileNotFoundError | 正常打开 | 文件开头 | 只读 | 保留原内容 |
| r+ | open('file', 'r+') | 报错FileNotFoundError | 正常打开 | 文件开头 | 读写 | 保留原内容 |
| w | open('file', 'w') | 创建新文件 | 正常打开 | 文件开头 | 只写 | 清空原内容 |
| w+ | open('file', 'w+') | 创建新文件 | 正常打开 | 文件开头 | 读写 | 清空原内容 |
| a | open('file', 'a') | 创建新文件 | 正常打开 | 文件末尾 | 只写 | 保留原内容,追加写入 |
| a+ | open('file', 'a+') | 创建新文件 | 正常打开 | 文件末尾 | 读写 | 保留原内容,追加写入 |
| x | open('file', 'x') | 创建新文件 | 报错FileExistsError | 文件开头 | 只写 | 不适用(报错,操作失败) |
| x+ | open('file', 'x+') | 创建新文件 | 报错FileExistsError | 文件开头 | 读写 | 不适用(报错,操作失败) |
快速分类速查表
① 按"文件不存在时"分类
| 行为 | 模式 |
|---|---|
| 报错 | r、r+ |
| 创建新文件 | w、w+、a、a+、x、x+ |
② 按"文件已存在时"分类
| 行为 | 模式 |
|---|---|
| 报错 | x、x+ |
| 正常打开 | r、r+、w、w+、a、a+ |
③ 按"写入位置"分类
| 写入位置 | 模式 |
|---|---|
| 文件开头 | r+、w、w+、x、x+(r不能写) |
| 文件末尾(追加) | a、a+ |
④ 按"读/写权限"分类
| 权限 | 模式 |
|---|---|
| 只读 | r |
| 只写 | w、a、x |
| 读写 | r+、w+、a+、x+ |
⑤ 按"对原内容的处理"分类(仅文件存在时有效)
| 处理方式 | 模式 |
|---|---|
| 保留原内容 | r、r+、a、a+ |
| 清空原内容 | w、w+ |
| 不适用(直接报错) | x、x+ |
记忆口诀(帮你快速记住)
r 家族报错,w/a/x 家族创建
w 家族会清空,a 家族写末尾,r 家族读开头
r(read):读,不存在就报错
w(write):写,不存在就创建,存在就清空
a(append):追加,不存在就创建,存在就追加到末尾
x(exclusive):排他创建,不存在就创建,存在就报错
加号
+:表示同时具备读写能力
一图流总结(逻辑关系)
文件打开模式 │ ┌───────────────┼───────────────┐ │ │ │ r 家族 w 家族 x 家族 (不存在报错) (不存在创建) (存在就报错) │ │ │ r(只读) w(清空写) x(排他创建) r+(读写) w+(清空读写) x+(排他读写) │ a 家族 (不存在创建) │ a(追加写) a+(追加读写)