我正在尝试解析BMP文件,进行一些更改,然后使用Python重新组装新的BMP。
回车似乎是个大问题。当我使用Notepad ++打开位图文件并搜索"\r'
时,该字符不存在。我用Python读取文件(readData = fileIn.read())并尝试使用readData.find('\r')
进行搜索,它返回-1
。搜索"\n"
工作正常。一切都很好。
当我尝试使用fileOut.write(readData)
将这个完全相同的文本块写入新的BMP并使用Notepad ++搜索"\r"
时,我能够找到它(两次,每次对应于预先存在的"\n"
个字符。)
有没有办法将此数据块写入新的BMP而不自动添加"\r"
?我已尝试将.strip()
和.replace('\r','')
应用于字符串,然后再将其写入新文件。
答案 0 :(得分:8)
如果要将文件打开为二进制文件,则可能以文本(默认值)打开文件。
open("example.bmp", "rb") # to [r]ead as [b]inary
open("example.bmp", "wb") # to [w]rite as [b]inary
默认设置是使用文本模式,可以在写入时将
'\n'
个字符转换为特定于平台的表示,然后在读取时返回。因此,在打开二进制文件时,您应该将'b'
附加到模式值以在二进制模式下打开文件,这将提高可移植性。
答案 1 :(得分:1)
您正在以文本模式打开文件,而您需要二进制模式。在此处查找有关open()的更多信息: http://docs.python.org/library/functions.html