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

Sla*_*off 1 python io file

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

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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

您正在将每个字节转换为表示该字节的十六进制值的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
Run Code Online (Sandbox Code Playgroud)