为什么这个python代码在不更改文件的情况下将文件大小增加了一倍



基本上,我只是在编辑文件后尝试将字符串写入文件,作为概念验证,我只是尝试进行本应毫无意义的更改。然而,如下面的示例所示,由于某种原因,即使这样也会使我的输出大小增加一倍。有人知道为什么会发生这种事吗?

content = StringIO.getvalue()
with open("real.png", 'wb') as dump:
    dump.write(content) #35KB
content = [str(ord(char)) for char in content]
content = "".join([hex(int(char)).lstrip("0x").zfill(2) for char in content])
with open("new.png", "wb") as dump:
    dump.write(content) #70KB

您正在将每个字节转换为表示该字节的十六进制值的2字节字符串。十六进制字符串表示形式与原始字节不同。

如果没有将文件大小增加一倍,我会感到非常惊讶。

如果使用HEX编辑器查看将字节显示为十六进制字符的原始图像,则会将该数据的编辑器表示与文件的实际内容混淆。

如果您想更高效地完成该任务,可以使用binascii.hexlify()函数以更少的代码完成。镜像操作称为binascii.unhexlify():

from binascii import hexlify, unhexlify
content = StringIO.getvalue()
hex_content = hexlify(content)
same_content = unhexlify(hex_content)
assert content == same_content

最新更新