首页 > 解决方案 > 在 Python 中对文件输入执行按位运算

问题描述

我在搞乱 Python 文件输入,我想到了将 .png 文件中的每个字节反转,并将其放入一个新文件中,只是为了看看效果会怎样。我的代码是

with open("BeginningImage.png","rb") as f_to:
    with open("EndLocation.png","wb") as f_wr:
        f = f_to.read()
        f_wr.write(~f)

这会引发错误: TypeError: bad operand type for unary ~: 'bytes'. 当我摆脱按位补码时,代码按预期运行。遗憾的是,我无法找到发生此问题的任何来源。有谁知道为什么会发生这个错误,以及我是否可以做些什么来解决这个问题?提前致谢!

标签: python

解决方案


按位运算适用于整数而不是字节。字节的行为更像字符串。字节中的每个元素都是一个无符号的 8 位整数。

https://wiki.python.org/moin/BitManipulation

像下面这样的东西应该可以工作。

with open("BeginningImage.png","rb") as f_to:
    with open("EndLocation.png","wb") as f_wr:
        f = f_to.read()
        byts = bytes((~uint_8 for uint_8 in f))
        f_wr.write(byts)

推荐阅读