web-dev-qa-db-ja.com

文字列を8進数に変換する最もPython的な方法

構成ファイルに保存されているファイルマスクを使用して、ファイルのアクセス許可を変更しようとしています。 os.chmod()は8進数を必要とするため、文字列を8進数に変換する必要があります。例えば:

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

0000から0777までのすべての8進数を作成し、それを文字列バージョンと並べて辞書に入れるという明らかな最初の試みの後、私は次のことを思いつきました。

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)

これを行う簡単な方法はありますか?

15
brandonsimpkins

基数8をintに指定してみましたか。

num = int(your_str, 8)

例:

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