在 Python 中,`open()` 函数支持多种模式用于打开文件,每种模式用于不同的操作。以下是常见的文件打开模式:
读写模式
1. **`'r'`**: 只读模式 (read)
- 打开文件用于读取。如果文件不存在,会抛出 `FileNotFoundError` 异常。
with open('example.txt', 'r', encoding='utf-8') as file:
content = file.read()
print(content)
2. **`'w'`**: 只写模式 (write)
- 打开文件用于写入。如果文件已存在,文件内容会被清空。如果文件不存在,会创建一个新文件。
with open('example.txt', 'w', encoding='utf-8') as file:
file.write('这是新内容,旧内容已被覆盖。\n')
3. **`'a'`**: 追加模式 (append)
- 打开文件用于追加。如果文件已存在,新的数据将写在文件末尾。如果文件不存在,会创建一个新文件。
with open('example.txt', 'a', encoding='utf-8') as file:
file.write('这是追加的内容。\n')
xiaowang = balabala
file.write(xiaowang + '\n')
4. **`'x'`**: 独占创建模式 (exclusive creation)
- 打开文件用于写入。如果文件已存在,会抛出 `FileExistsError` 异常。如果文件不存在,会创建一个新文件。
二进制和文本模式
5. **`'b'`**: 二进制模式 (binary)
- 以二进制模式打开文件,用于读取或写入二进制数据(如图像、音频等)。通常与其他模式组合使用,例如 `'rb'`、`'wb'`、`'ab'`。
with open('image.jpg', 'rb') as file:
image_data = file.read()
print(image_data[:10]) # 打印前10个字节的数据
with open('output.bin', 'wb') as file:
data = b'\x00\xFF\xFE\xFD' # 示例二进制数据
file.write(data)
6. **`'t'`**: 文本模式 (text)
- 以文本模式打开文件,默认模式。读取或写入文本数据。通常与其他模式组合使用,例如 `'rt'`、`'wt'`、`'at'`。
读写组合模式
7. **`'r+'`**: 读写模式 (read/write)
- 打开文件用于读写。如果文件不存在,会抛出 `FileNotFoundError` 异常。可以读取和修改文件的内容。
with open('example.txt', 'r+', encoding='utf-8') as file:
content = file.read()
print('原始内容:', content)
file.write('\n这是新追加的内容。')
8. **`'w+'`**: 读写模式 (write/read)
- 打开文件用于读写。如果文件已存在,文件内容会被清空。如果文件不存在,会创建一个新文件。
9. **`'a+'`**: 读写追加模式 (append/read)
- 打开文件用于读写追加。如果文件已存在,新的数据将写在文件末尾。如果文件不存在,会创建一个新文件。
with open('example.txt', 'a+', encoding='utf-8') as file:
file.write('追加的新内容。\n')
file.seek(0) # 将文件指针移动到文件开头
content = file.read()
print('完整内容:', content)
10. **`'x+'`**: 读写独占创建模式 (exclusive creation/read)
- 打开文件用于读写。如果文件已存在,会抛出 `FileExistsError` 异常。如果文件不存在,会创建一个新文件。
特殊模式
11. **`'U'` 或 `'rU'`**: 通用换行符支持模式 (Universal Newline)
- 仅在 Python 2 中使用。在 Python 3 中不再支持该模式。读取文件时,支持所有常见的换行符(`'\n'`, `'\r'`, `'\r\n'`)。
示例组合
- **`'rb'`**: 以二进制模式读取文件。
- **`'wb'`**: 以二进制模式写入文件。
- **`'r+'`**: 以读写模式打开文件,不清空内容。
- **`'w+'`**: 以读写模式打开文件,清空文件内容。