python - 为什么这个 python 代码会在不更改文件的情况下将我的文件大小加倍?

标签 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

最佳答案

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

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

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

如果您想更有效地完成该任务,可以使用 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

关于python - 为什么这个 python 代码会在不更改文件的情况下将我的文件大小加倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17551945/

相关文章:

python - python 中的奇怪结果

python - 如何在给定的时间间隔内启用/禁用按钮

ruby - 有没有一种更简洁的方法使用 podio gem 在 Ruby 中将 xlsx 对象转换为 csv

java - 用户输入到java中的文本文件中

file - 使用 MIPS 程序集读取文件

java - [Java]读取并处理文件

python - 迭代 2 个列表并检查值

python - 找不到 python xlrd 版本

c - 我在 C 语言中重命名和删除函数时遇到困难

ruby-on-rails - Ruby Dir ['**/*' ] 限制?