将八进制数表示为str

时间:2016-03-01 13:30:01

标签: python python-3.x

我有这样的方法

def _changePerms(path, perms):
    try:
        os.chmod(path, perms)
        log.debug("Setting permission of file " + path + " to " + str(perms))
    except Exception as e:
        raise e

我称之为

的方法
_changePerms(path,0o755)

但我的输出日志打印出来:

2016-03-01 18:51:41,716 Setting permission of file path to 493

我想以八进制形式打印数字,而不是十进制形式(八进制755 ==十进制493)。

如何将值打印为字符串?

3 个答案:

答案 0 :(得分:3)

  

这里我不知道它为什么打印0o755打印493

因为它们是非常相同的值,一个是八进制的,一个是十进制的:

>>> 0o755
493
>>> '{:o}'.format(0o755)
'755'

一旦转换为数值,它存储的int对象就不会指示最初使用的是什么库。在这种情况下使用Octal是因为Unix文件权限便于在3位组中进行分组:对于所有者,组和其他权限(每个权限包含读,写和执行位),每个都获得一个数字。其他常见的基础包括2(二进制),16(十六进制)和64(base64 - 用于在文本协议(如电子邮件)中传输二进制数据)。

答案 1 :(得分:2)

默认情况下,数字的字符串表示形式以10为基数。要将其打印为八进制数,可以使用str.format()

perms = 0o755
log.debug("Setting permission of file {} to {:o}".format(path, perms))
格式说明符中的

'o'代表“八进制格式”。

答案 2 :(得分:0)

将字符串(6位数字)转换为Java中的八进制权限代码

SymbolicToOctal(“ rw-r -----”);

公共静态字符串SymbolicToOctal(String permString) {

    String octalPerm = "";

    String ocatalString = "";
    int secondInd = 0;
    for (int x = 0; x < 3; x++) {
        if (x == 0) {
            ocatalString = permString.substring((x * 3), x + 3);
            secondInd = x + 3;
        } else {
            ocatalString = permString.substring((x * 3), (secondInd +3));
            secondInd = secondInd +3;
        }

        octalPerm += CalculatePermissionSum(ocatalString);
    }
    return octalPerm;

}


   public static int CalculatePermissionSum(String permString)
{
    int octalPerm = 0;

    for (char a: permString.toCharArray())
    {
        switch (a)
        {
            case 'r':
                octalPerm += 4;
                break;
            case 'w':
                octalPerm += 2;
                break;
            case 'x':
                octalPerm += 1;
                break;
            case '-':
                octalPerm += 0;
                break;
        }
    }
    return octalPerm;
}