python 将读取文件中的字符串方法替换为二进制

标签 python binary

我以 readbinary("rb") 模式打开一个图像文件并将数据存储在变量中。现在我想用我的值替换二进制文件中的一些值..但是使用通常的字符串替换方法它不起作用

f=open("a.jpg","rb")
a=f.read()

''' first line is '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xe1\x00*Exif\x00\x00II*\x00\x08\x00\x00\x00\x0 '''

a=a.replace("ff","z")
print a

#but there's no change in a

谁能告诉我哪里出了问题..我也尝试过

a=a.replace(b'ff',b'z')

但输出仍然没有改变。

谁能告诉我应该做什么来执行替换?

最佳答案

我不知道你使用的是哪个版本的Python(2和3之间的这种操作不同),但在执行replace方法之前尝试一下a = str(a)

编辑:对于python 2.7,我发现做你想做的事情的唯一合理的方法是使用内置函数repr。示例:

>>> picture = open("some_picture.jpg", 'rb')
>>> first_line = picture.readline()
>>> first_line
'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xe1\x00*Exif\x00\x00II*\x00\x08\x00\x00\x00\x01\x001\x01\x02\x00\x07\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00Google\x00\x00\xff\xdb\x00\x84\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05\x04\x04\x05\n'
>>> repr(first_line)
>>> "'\\xff\\xd8\\xff\\xe0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\xff\\xe1\\x00*Exif\\x00\\x00II*\\x00\\x08\\x00\\x00\\x00\\x01\\x001\\x01\\x02\\x00\\x07\\x00\\x00\\x00\\x1a\\x00\\x00\\x00\\x00\\x00\\x00\\x00Google\\x00\\x00\\xff\\xdb\\x00\\x84\\x00\\x03\\x02\\x02\\x03\\x02\\x02\\x03\\x03\\x03\\x03\\x04\\x03\\x03\\x04\\x05\\x08\\x05\\x05\\x04\\x04\\x05\\n'"
>>> repr(first_line).replace('ff', 'SOME_OTHER_STRING')
"'\\xSOME_OTHER_STRING\\xd8\\xSOME_OTHER_STRING\\xe0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\xSOME_OTHER_STRING\\xe1\\x00*Exif\\x00\\x00II*\\x00\\x08\\x00\\x00\\x00\\x01\\x001\\x01\\x02\\x00\\x07\\x00\\x00\\x00\\x1a\\x00\\x00\\x00\\x00\\x00\\x00\\x00Google\\x00\\x00\\xSOME_OTHER_STRING\\xdb\\x00\\x84\\x00\\x03\\x02\\x02\\x03\\x02\\x02\\x03\\x03\\x03\\x03\\x04\\x03\\x03\\x04\\x05\\x08\\x05\\x05\\x04\\x04\\x05\\n'"

关于python 将读取文件中的字符串方法替换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35260712/

相关文章:

python - 在 Python 3.6 中导入库 "modin"时出错

python - LeetCode 762 为什么单独的代码在 Jupyter Notebook 中有效,而在 Leetcode 中无效

需要登录的Python阅读url

python - 我可以避免 Python 中的线程 UDP 套接字丢失数据吗?

python - 如何在 Python 3 的列表中初始化和递增未定义的值?

java - 在Java中,我可以用二进制格式定义一个整数常量吗?

c - 使用 open() 和 read() 读取 C 中的二进制整数文件

AWK 将十进制转换为二进制

linux - 上传 linux 二进制文件到 maven 仓库

python - 将一个以小写字母开头的元素连接到列表的前一个元素