为什么这个python代码加倍我的文件大小而不改变它?

时间:2013-07-09 15:16:11

标签: python file io

基本上我只是在编辑它之后尝试将一个字符串写入文件中,并且作为一个概念验证我只是想做一个应该是无意义的改变。但是,如下例所示,即使这样也会因为某种原因使输出的大小加倍。有谁知道为什么会这样?

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

1 个答案:

答案 0 :(得分:7)

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

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

如果您使用HEX编辑器查看显示字节为十六进制字符的原始图像,那么您将该数据的一个编辑器表示与该文件的实际内容混淆。< / p>

如果您想更有效地完成该任务,可以使用binascii.hexlify() function以更少的代码执行此操作。镜像操作称为binascii.unhexlify()

from binascii import hexlify, unhexlify

content = StringIO.getvalue()
hex_content = hexlify(content)
same_content = unhexlify(hex_content)
assert content == same_content