一尘不染

将字符串转换为八进制数的大多数pythonic方法

python

我正在使用存储在配置文件中的文件掩码来更改文件的权限。由于os.chmod()需要八进制数,因此我需要将字符串转换为八进制数。例如:

'000' ==> 0000 (or 0o000 for you python 3 folks)
'644' ==> 0644 (or 0o644)
'777' ==> 0777 (or 0o777)

在明显地尝试创建从0000到0777的每个八进制数并将其放入以字符串版本作为排队的字典中之后,我想到了以下内容:

def new_oct(octal_string):

    if re.match('^[0-7]+$', octal_string) is None:
        raise SyntaxError(octal_string)

    power = 0
    base_ten_sum = 0

    for digit_string in octal_string[::-1]:
        base_ten_digit_value = int(digit_string) * (8 ** power)
        base_ten_sum += base_ten_digit_value
        power += 1

    return oct(base_ten_sum)

有没有更简单的方法可以做到这一点?


阅读 266

收藏
2021-01-20

共1个答案

一尘不染

您是否刚刚尝试将基数8指定为int

num = int(your_str, 8)

例:

s = '644'
i = int(s, 8) # 420 decimal
print i == 0644 # True
2021-01-20