如何不改变值将八进制转换为字符串?
如何用Python把00024变成'00024'?
如果我在Python的命令行里输入00024,它会输出20。我想把00024转换成字符串,结果是'00024'。有什么建议吗?
1 个回答
3
如果你想用前导零来表示整数,可以用format()
把数字转换成字符串:
format(integer, '05d')
每当你输出值时,print
会自动把它转换成字符串,使用str()
。而通过format()
,你可以明确控制这种转换是怎么进行的。
在交互式解释器中,当你输入一个数字时,使用的是repr()
,但对于整数来说,输出和使用str()
是完全一样的。
演示:
>>> format(24, '05d')
'00024'
当你输入00024
作为整数时,在Python 2中,这会被解析为八进制数字,而在Python 3中,这会导致语法错误。
如果你想在Python 2的命令行中把这样的数字当作字符串来处理,你是无法做到的,尤其是当前导零数量不固定时。你最多只能把得到的整数重新格式化为八进制,依然带有前导零。这会再次生成一个字符串,但你必须手动指定前导零的数量:
>>> number = 00024
>>> format(number, '05o')
'00024'
注意,一旦你遇到一个没有前导零的数字,这种方法就会失败;如果数字大于4095(07777八进制),你可以自动检测这些值:
strnumber = format(number, '5d' if number > 0o07777 else '05o')
而且任何带有前导零且包含数字8或9的数字都会直接导致语法错误:
>>> 09876
File "<stdin>", line 1
09876
^
SyntaxError: invalid token
更好的办法是直接把这些数字当作字符串输入。