Python write() 不写入完整字符串

Python write() not writing the full string

提问人:YupYupTRP 提问时间:11/14/2023 更新时间:11/14/2023 访问量:57

问:

因此,我制作了一个脚本,您可以在变量中放入图像或音频文件等十六进制数据,然后将其复制到自己的文件中(自解压)。但是,它不适用于超过 2MB 的文件。

我已经用最大 2MB 的文件测试了它,它工作正常,但是当十六进制数据大小超过 2MB 时,它不会将完整的输出写入文件,最终得到的文件只是原始大小的一小部分。这是我的代码(示例十六进制数据只是随机的):

import os
import binascii

def save_image(filename, hex_imgdata):
    if os.path.exists(filename):
        current_file = open(filename, "wb")
    else:
        current_file = open(filename, "xb")
    decoded_imgdata = bytes.fromhex(hex_imgdata)
    current_file.write(decoded_imgdata)
    current_file.close()
    print("Saved " + filename)

example_hex = "A2C688B272"

if not os.path.exists("extracted"):
    os.mkdir("extracted")
os.chdir("extracted")

save_image(filename = "example.png", hex_imgdata = example_hex)

如何让它处理更大的文件?

Python 十六进制 自解压

评论

0赞 tdelaney 11/14/2023
无法重现。我将您的示例更改为并得到了一个 3,000,000 字节的文件。example_hex = "A2" * 3_000_000
0赞 tdelaney 11/14/2023
我还添加了查看尺寸。您能否进行相同的更改和测试,以便我们使用相同的代码?print(os.stat("example.png").st_size)
0赞 YupYupTRP 11/14/2023
我用一个 600 万字符的文件进行了测试,它只给了我不到一半的文件,尝试复制一个随机 6MB 文件的十六进制数据并将其放入,我也会添加它
1赞 tdelaney 11/14/2023
您发布的代码将写入一个 5 字节的文件。你能发布失败的代码吗?它应该只是一个更大的字符串,就像我建议的那样。example_hex
0赞 tdelaney 11/14/2023
由于十六进制到二进制的转换,写入的文件将是字符串大小的一半。

答: 暂无答案