在Python中,文件对象的打开模式(如 'r', 'w', 'rb', 'wb' 等)决定了如何与文件进行交互。
一、'r' (Read)
用于读取文件。
文件必须存在,否则会引发 FileNotFoundError。
读取的是文本文件(如果文件是二进制文件,则需要解码)。
示例:with open('file.txt', 'r') as f: content = f.read()
二、'w' (Write)
用于写入文件。
如果文件已存在,其内容会被覆盖。
如果文件不存在,会创建一个新文件。
写入的是文本文件(如果数据是二进制,则需要编码)。
示例:with open('file.txt', 'w') as f: f.write('Hello, World!')
三、'rb' (Read Binary)
用于读取二进制文件。
文件必须存在,否则会引发 FileNotFoundError。
读取的是二进制数据,不需要解码。
示例:with open('file.bin', 'rb') as f: content = f.read()
四、'wb' (Write Binary)
用于写入二进制文件。
如果文件已存在,其内容会被覆盖。
如果文件不存在,会创建一个新文件。
写入的是二进制数据,不需要编码。
示例:with open('file.bin', 'wb') as f: f.write(b'\x00\x01\x02')
五、联系
这些模式都是open函数的参数,用于指定文件的打开方式。
除了上述的四种模式外,还有其他模式,如 'a'(追加模式,用于在文件末尾添加内容)、'x'(独占创建模式,如果文件已存在则引发异常)等。
所有的模式都可以与 'b' 结合使用,以指定文件为二进制模式。
六、区别
文本与二进制: 使用文本模式(如 'r'、'w')时,Python会自动处理文件的换行符(例如,在Windows系统中将 \n 转换为 \r\n)。而二进制模式(如 'rb'、'wb')则不会进行这种转换,直接读写原始数据。
文件内容: 使用写入模式(如 'w'、'wb')时,如果文件已存在,其内容会被覆盖。而读取模式(如 'r'、'rb')则不会修改文件内容。
文件存在性: 使用读取模式时,文件必须存在;而写入模式会在文件不存在时创建新文件。