如何将八进制转换为字符串而不更改值?

时间:2014-09-11 07:13:56

标签: python python-2.7

如何将00024转换为' 00024'用python?

如果我在python shell中运行00024,它会打印20作为结果。我想将00024转换为字符串,结果是' 00024'。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

如果你想用前导零表示整数format()明确表示字符串的数字:

format(integer, '05d')

每当您输出值时,print会隐式将其转换为包含str()的字符串,而format()则可以控制显式转换的发生方式。

当您在交互式解释器中回显数字时,会使用repr(),但对于整数,输出与使用str()时的输出完全相同。

演示:

>>> format(24, '05d')
'00024'

当您输入00024作为整数文字时,Python 2将其解析为八进制数,在Python 3中这是一个语法错误。

如果你想在Python 2 shell 中解释这样的数字就好像它是一个字符串,你就不能做你想要的,而不是任意数量的前导零。您最多可以将结果整数重新格式化为八进制,再次使用前导零。这将再次产生一个字符串,但你必须硬编码前导零的数量:

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

更好的选择是输入作为字符串