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

为什么这个python代码在不改变文件大小的情况下将文件大小增加了一倍?,python,file,io,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] co

基本上,我只是试图在编辑完一个文件后将一个字符串写到一个文件中,作为概念的证明,我只是试图做一个毫无意义的更改。但是,如下面的示例所示,由于某种原因,即使这样,输出的大小也会增加一倍。有人知道为什么会这样吗

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字节字符串。十六进制字符串表示法与原始字节不同

如果文件的大小没有翻倍,我会非常惊讶

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

如果您想更有效地完成该任务,可以使用以更少的代码完成。镜像操作称为:


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

如果文件的大小没有翻倍,我会非常惊讶

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

如果您想更有效地完成该任务,可以使用以更少的代码完成。镜像操作称为:


我还检查了real.png文件和new.png文件的内容在视觉上是否相同。否决票可以解释吗?我想让这个问题变得更好。如果内容相同,则大小必须相同。。那么内容有什么不同呢?视觉上完全相同。这意味着文本编辑器显示它们是相同的。您使用什么来验证内容?UTF-16是否可能在某个地方使用?是否确实打开了正确的输出文件?因为它声称在视觉上是相同的,所以我想到了这些想法——一个二进制文件和一个十六进制编码的表示在打开时看起来很不一样。我还检查了real.png文件和new.png文件的内容在视觉上是否相同。否决票可以解释吗?我想让这个问题变得更好。如果内容相同,则大小必须相同。。那么内容有什么不同呢?视觉上完全相同。这意味着文本编辑器显示它们是相同的。您使用什么来验证内容?UTF-16是否可能在某个地方使用?是否确实打开了正确的输出文件?因为它声称在视觉上是相同的,所以我想到了这些想法——一个二进制文件和一个十六进制编码的表示在打开时看起来很不一样。使用二进制/十六进制编辑器或二进制差异来查看。对不起,您能澄清一下我在这里使用binascii.hexlify的确切方式吗?我试着用它来代替第二行,结果一切都坏了。你能解释一下我是如何做到我在这里要做的事情的吗?我感谢您的反馈,但这仍然是我需要完成的任务,对我大喊大叫,因为我误解了我正在做的事情,然后又不解释如何正确地做,这确实令人沮丧:/谢谢您的示例,但这似乎与我实际要做的恰恰相反。我希望这两个文件都是单字节版本。不清楚你想做什么。你说你做了一个毫无意义的改变;我要指出的是,你没有做出毫无意义的改变。你想做的事情你没有说出来。为什么你想做一个毫无意义的改变?你想用什么样的数据?对不起,你能澄清一下我到底是如何使用binascii.hexlify的吗?我试着用它来代替第二行,结果一切都坏了。你能解释一下我是如何做到我在这里要做的事情的吗?我感谢您的反馈,但这仍然是我需要完成的任务,对我大喊大叫,因为我误解了我正在做的事情,然后又不解释如何正确地做,这确实令人沮丧:/谢谢您的示例,但这似乎与我实际要做的恰恰相反。我希望这两个文件都是单字节版本。不清楚你想做什么。你说你做了一个毫无意义的改变;我要指出的是,你没有做出毫无意义的改变。你想做的事情你没有说出来。为什么你想做一个毫无意义的改变?你想用什么样的数据?
from binascii import hexlify, unhexlify

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