在Python中使用open()函数打开文件时,您需要告知Python您打算如何操作该文件。您想从中读取内容吗?写入新内容,这可能会覆盖现有内容吗?或者只是在文件末尾添加一些信息?您的意图通过mode参数来指定。如果您不提供mode参数,Python会默认您想以文本模式读取文件,这等同于指定'rt'。然而,明确您的意图是良好的编程习惯。让我们来看看可用的不同模式。主要模式这些字母定义了您希望执行的主要操作:'r' (读取): 这是默认模式。它以读取方式打开文件。如果文件不存在,Python将引发FileNotFoundError。文件指针(指示当前的读写位置)位于文件开头。# 以读取方式打开 data.txt (明确指定) try: with open('data.txt', 'r') as f: content = f.read() print("文件内容:", content) except FileNotFoundError: print("错误: data.txt 未找到。")'w' (写入): 此模式以写入方式打开文件。请注意: 如果文件已存在,其内容将立即被擦除(截断)。如果文件不存在,则会创建新文件。文件指针位于文件开头。# 以写入方式打开 output.txt。如果文件不存在则创建,如果存在则擦除现有内容。 with open('output.txt', 'w') as f: f.write("这是第一行。\n") f.write("这会覆盖文件中之前的所有内容。")'a' (追加): 此模式以追加方式打开文件。任何写入文件的数据都将添加到文件末尾。如果文件不存在,则会创建新文件。文件指针位于文件末尾,因此不会覆盖现有内容。这对于向日志文件添加条目等任务很有用。# 以追加方式打开 log.txt。如果文件不存在则创建。 with open('log.txt', 'a') as f: f.write("添加了新的日志条目。\n")'x' (独占创建): 此模式专门用于创建新文件并以写入方式打开它。如果文件已存在,Python将引发FileExistsError。这可以防止在您打算创建新文件时,意外覆盖现有文件。# 尝试创建新配置文件;如果文件已存在则失败。 try: with open('config_new.ini', 'x') as f: f.write("[Settings]\n") f.write("Mode=Test\n") print("config_new.ini 创建成功。") except FileExistsError: print("错误: config_new.ini 已存在。无法覆盖。")模式修饰符您可以将主要模式与额外的修饰符组合使用:'t' (文本模式): 此修饰符表明文件应作为文本处理。如果没有指定其他修饰符,这是默认修饰符。在文本模式下,Python会处理编码(写入时将字符串转换为字节,读取时将字节转换为字符串),并自动将特定于平台的行结束符(如Linux/macOS上的\n和Windows上的\r\n)转换为Python标准\n。因此,'r'与'rt'相同,'w'与'wt'相同。'b' (二进制模式): 此修饰符表明文件应作为原始字节序列处理。当处理非文本文件时,例如图像、音频文件、可执行程序,或任何需要精确字节级控制的数据时,请使用此模式。在二进制模式下,不执行编码/解码或行结束符转换。数据以bytes对象的形式读写。可以将其与主要模式组合使用,例如:'rb'(读取二进制)、'wb'(写入二进制)、'ab'(追加二进制)、'xb'(独占创建二进制)。# 示例: 将原始字节写入文件 data_to_write = b'\x00\x10\xFF\xEE' # 字节字面量 with open('binary_data.bin', 'wb') as f: f.write(data_to_write) # 示例: 从文件读取原始字节 with open('binary_data.bin', 'rb') as f: read_data = f.read() print("读取的二进制数据:", read_data)'+' (更新模式): 此修饰符允许在同一个文件对象上进行读取和写入操作。它必须与主要模式之一('r'、'w'或'a')组合使用。'r+': 以读写方式打开文件。文件指针位于开头。文件必须存在(与'r'类似)。'w+': 以写读方式打开文件。如果文件不存在则创建,如果存在则截断(与'w'类似)。文件指针位于开头。'a+': 以追加和读取方式打开文件。如果文件不存在则创建。对于写入操作,文件指针最初位于文件末尾。读取位置取决于您在文件中寻址的位置。使用'+'模式需要仔细管理文件指针(使用seek()等方法,此处未详细说明),以便在期望的位置读写数据。# 示例: 使用 'r+' 读取然后覆盖文件的一部分 # 假设文件 'data.txt' 包含 "Line 1\nLine 2\n" try: with open('data.txt', 'r+') as f: content = f.read() print("原始内容:", content) # 将指针移回开头以覆盖 f.seek(0) f.write("已覆盖!") # 注意: 如果新内容较短,原始内容的其余部分可能会保留 except FileNotFoundError: print("错误: data.txt 未找到。")常用模式总结模式描述文件存在时的行为文件不存在时的行为指针位置r读取 (文本,默认)从开头读取FileNotFoundError开头w写入 (文本)截断 (擦除)创建开头a追加 (文本)追加到末尾创建末尾x独占创建 (文本)FileExistsError创建开头rb读取 (二进制)从开头读取FileNotFoundError开头wb写入 (二进制)截断 (擦除)创建开头ab追加 (二进制)追加到末尾创建末尾r+读写 (文本)从开头读写FileNotFoundError开头w+写读 (文本)截断 (擦除)创建开头a+追加和读取 (文本)追加到末尾创建末尾 (写入时)选择正确的模式对于安全高效地操作文件非常重要。始终考虑是否需要保留现有数据、文件是否必须已存在,以及您是在处理文本数据还是原始二进制数据。如示例所示,使用with语句可以确保即使发生错误,文件也会自动关闭,这对于可靠的文件处理是必不可少的。