把弦转换成八进制数的最Python的方法

2024-05-23 14:43:29 发布

您现在位置: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)

有更简单的方法吗?


Tags: or文件字符串权限forbasestringvalue
2条回答

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

num = int(your_str, 8)

示例:

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

以下是解决方案:

将八进制字符串“777”转换为十进制数字511

dec_num = int(oct_string, 8) # "777" -> 511

你担心os.chmod()?我们试试看!

os.chmod("file", 511)  # it works! -rwxrwxrwx.
os.chmod("file", 0777) # it works! -rwxrwxrwx.
os.chmod("file", int("2777",8)) # it works! -rwxrwsrwx. the number is 1535!

它证明了python中的chmodcan accept decimaldecimal can used as octal


八进制就够了,因为如果你试着

print dec_num == 0777 # True

然后将十进制数511转换为八进制string“0777”

oct_num = oct(dec_num)  # 511 -> "0777" , it is string again.

注意没有0777号,但只有10月字符串“0777”或12月数字 在python中如果你写了0777号,它会自动把0777号翻译成511号,在这个过程中不存在0777号。

摘要

dec_num = int(oct_string, 8)
oct_num = oct(int(oct_string,8))

print dec_num         # 511
print dec_num == 0777 # True ! It is actually 511, just like dec_num == 511
print oct_num         # 0777
print oct_num == 0777 # Flase! Because it is a string!

相关问题 更多 >