如何解决二进制模式不接受encoding参数的问题
解决“binary mode doesn't take an encoding argument”报错
嘿,这个坑我踩过!其实原因特别直白:二进制模式和编码参数是互斥的。让我给你掰扯清楚:
为什么会报错?
当你用二进制模式('rb'读、'wb'写)打开文件时,Python直接操作的是原始字节流,不需要做字符串和字节之间的编码/解码转换。而encoding参数是给文本模式('r'/'w'/'a')用的,用来告诉Python怎么把字节转换成字符串(读时)或者把字符串转成字节(写时)。你同时加了二进制模式和encoding,Python自然就懵了,给你抛出这个错误。
两种解决方案,看你需求选:
1. 我确实要处理二进制文件(图片、视频、压缩包等)
直接删掉encoding参数就行,读写都用字节类型:
# 错误写法(会报错) # with open('image.png', 'rb', encoding='utf-8') as f: # 正确写法 with open('image.png', 'rb') as f: byte_data = f.read() # 得到bytes类型的原始数据 # 写二进制文件同理,要传入bytes对象 with open('new_image.png', 'wb') as f: f.write(byte_data)
2. 我其实是要处理文本文件,不小心用了二进制模式
把文件模式改成文本模式(去掉b),保留encoding参数,这样读写的就是字符串:
# 错误写法(会报错) # with open('article.txt', 'rb', encoding='utf-8') as f: # 正确写法 with open('article.txt', 'r', encoding='utf-8') as f: text_content = f.read() # 得到str类型的文本 # 写文本文件,直接传字符串就行 with open('new_article.txt', 'w', encoding='utf-8') as f: f.write(text_content)
小提醒
别搞混两种模式的使用场景:
- 非文本文件(二进制资源):必须用
rb/wb,不用编码 - 文本文件:用
r/w加正确的编码(比如utf-8),避免乱码
内容的提问来源于stack exchange,提问作者Nouros
相关产品推荐
相关产品推荐

