通过python 3进行字节文件转换

通过python 3进行字节文件转换,python,python-3.x,utf-8,decode,encode,Python,Python 3.x,Utf 8,Decode,Encode,对于我来说,有没有简单的方法可以将二进制文件的内容作为二进制字符串读取,将其转换为普通的utf-8字符串,对其执行一些操作,将其转换回二进制字符串并将其写入二进制文件?我试着做一些简单的事情,比如: a_file = open('image1.png', 'rb') text = b'' for a_line in a_file: text += a_line a_file.close() text2 = text.decode('utf-8') text3 = text2.encode

对于我来说,有没有简单的方法可以将二进制文件的内容作为二进制字符串读取,将其转换为普通的utf-8字符串,对其执行一些操作,将其转换回二进制字符串并将其写入二进制文件?我试着做一些简单的事情,比如:

a_file = open('image1.png', 'rb')
text = b''
for a_line in a_file:
    text += a_line
a_file.close()
text2 = text.decode('utf-8')
text3 = text2.encode()
a_file = open('image2.png', 'wb')
a_file.write(text3)
a_file.close()
但我得到了“Unicode无法解码位置中的字节…”


我做错了什么?

utf8格式有足够的结构,字节的随机排列是无效的UTF-8。最好的方法是只处理从文件读取的字节,您可以使用text=a_file.read一步提取这些字节。二进制字符串类型字节具有您想要的所有字符串方法,甚至是面向文本的方法,如isupper或swapcase。还有bytearray,字节类型的可变对应项


如果出于某种原因,您真的想将字节转换为str对象,请使用纯8位编码,如Latin1。您将得到一个unicode字符串,这正是您真正想要的。UTF-8只是Unicode的一种编码,这是一件非常不同的事情。

为什么你认为PNG文件会包含文本?不确定你想做什么,但另一个问题可能会有所帮助。请注意,如果你决定使用一种工作编码,例如拉丁语-1,你不需要自己在Python 3中处理编码/解码。只需将open'image1.png','rb'更改为open'image1.png','r',encoding='latin-1',对于输出,打开'image2.png','w',encoding='latin-1',您就可以读写,而无需手动编码/解码;读的时候它会被解码成str,写的时候会被编码成str;虽然以二进制模式打开文件会使代码更加透明。。。我不确定OP是否应该转换成str。