我想知道如何在仍然以十六进制文件写入文件时用零填充数字。我知道在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。
解决这个问题的方法是什么?是否有我可以使用的其他模块/功能,或者我错过了什么?
答案 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'