在以十六进制写入文件时,如何使用Zfill或Format?

2024-06-16 15:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何在以十六进制格式写入文件的同时用零填充一个数字。我知道用Python编写十六进制文件的唯一方法是使用chr()。在

paddednumbers = int(1)
with open('pads', 'w+') as source_file:
    with open('pads', 'wb') as dest_file:
        dest_file.write(chr(paddednumbers))

这写它没有填充,因为我显然没有提供它,这是我的问题出现的时候。在

因为chr()希望我提供int()形式的内容,而zfill喜欢使用int()以外的任何格式,所以我的处境很糟糕。在

我是这样设置zfill的:

^{pr2}$

当然,如果我们仍然可以在这个文件中写上chr()的数字。在

有什么解决办法?是否有其他模块/功能可以使用,或者我缺少什么?在


Tags: 文件方法sourceas格式with数字open
1条回答
网友
1楼 · 发布于 2024-06-16 15:27:04

问题的答案可能在于更好地理解unicode和字符编码。在

This article is a must read对于任何试图理解由StackOverflow创始人之一Joel Spolsky编写的unicode和编码的程序员来说

所有文件都是以最低级别的二进制文件编写的。当你说你想写“hex”到一个文件,我猜你的意思是你想把你的ASCII字符串以某种格式编码,当你把它打印成一个字节串时,它看起来像十六进制。在

>>> s = '1'.zfill(4)
>>> s
'0001'
>>> s.encode('utf_16')
'\xff\xfe0\x000\x000\x001\x00'

您可以将编码的数据写入文件。在

^{pr2}$

然后读回来:

>>> with open('filename.txt', 'r') as f:
...    encoded_string = f.read()
...
>>> encoded_string
'\xff\xfe0\x000\x000\x001\x00'
>>> encoded_string.decode('utf_16')
'0001'

相关问题 更多 >