pythonpython-2.6

Most pythonic way to convert a string to a octal number


I am looking to change permissions on a file with the file mask stored in a configuration file. Since os.chmod() requires an octal number, I need to convert a string to an octal number. For example:

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

After an obvious first attempt of creating every octal number from 0000 to 0777 and putting it in a dictionary lining it up with the string version, I came up with the following:

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)

Is there a simpler way to do this?


Solution

  • Have you just tried specifying base 8 to int:

    num = int(your_str, 8)
    

    Example:

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

    For Python 3.x do

    . . .
    print(i == 0o644)