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

时间:2015-12-18 00:21:34

标签: python format

我想知道如何在仍然以十六进制文件写入文件时用零填充数字。我知道在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的方式:

paddednumbers = hex(int(1))[2:].zfill(8)

如果我们将其转换回int(),那么我可以尝试将其写入chr()中的文件,当然我仍然得到代码中使用的数字1。

解决这个问题的方法是什么?是否有我可以使用的其他模块/功能,或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

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

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

所有文件都以最低级别的二进制文件写入。当你说你想写" hex"对于一个文件,我猜你的意思是你希望以一种看起来像十六进制的格式对你的ASCII字符串进行编码,当你把它作为一个字节串打印出来时。

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

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

with open('filename.txt', 'wb') as f:
    f.write(s.encode('utf_16'))

然后再读回来:

>>> 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'