获取2位数字格式的字符串,在python中使用前导零

时间:2015-08-02 08:14:56

标签: python

我需要添加2个字符串,这些字符串是mac格式的十六进制,有9个八位字节。作为其中的一部分我几乎已经取得了成功,但最后还有一件事就是以2位数格式获得价值。

string1= "aa.aa.aa.aa.aa.aa.aa.aa.ff"
string2= "00.00.00.00.00.00.00.00.01" 

当我添加这两个时,我得到的是aa.aa.aa.aa.aa.aa.aa.ab.0,但我希望价值为aa.aa.aa.aa.aa.aa.aa.ab.00。 (2个零)。

我尝试使用

temp = '%02d' % string3 

但我收到了错误

TypeError: %d format: a number is required, not str

因为我试图用字符串做。

2 个答案:

答案 0 :(得分:1)

您可以拆分字符串,用前导零填充每个部分并再次连接:

s = "aa.aa.aa.aa.aa.aa.aa.ab.0"
print '.'.join(["{0:0>2}".format(w) for w in s.split('.')])

输出:

aa.aa.aa.aa.aa.aa.aa.ab.00

(填充基于this answer。)

基于map的更短版本:

print '.'.join(map("{0:0>2}".format, s.split('.')))

答案 1 :(得分:0)

您可以改进创建方式,而不是修复生成的string3。如果将summands转换为整数,添加它们并将结果转换回十六进制表示,则不必担心丢失零:

a = "aa.aa.aa.aa.aa.aa.aa.aa.ff"
b = "00.00.00.00.00.00.00.00.01"
c = hex(int(a.replace('.', ''), 16) + int(b.replace('.', ''), 16))[2:-1]
print '.'.join(i+j for i,j in zip(c[::2], c[1::2]))

输出:

aa.aa.aa.aa.aa.aa.aa.ab.00

参考文献: