Большинство pythonic способ преобразования строки в восьмеричное число

Я хочу изменить права доступа к файлу с файловой маской, хранящейся в файле конфигурации. Поскольку 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) 

Есть ли более простой способ сделать это?

2 Solutions collect form web for “Большинство pythonic способ преобразования строки в восьмеричное число”

Вы просто попытались указать базу 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! 

это доказывает, что chmod can accept decimal и decimal can used as octal в python!


этого достаточно для восьмеричного, потому что если вы попробуете

 print dec_num == 0777 # True 

Затем введите десятичное число 511 в восьмеричную string "0777"

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

Обратите внимание, что нет номера 0777, но только октавная строка «0777» или dec num в питоне, если вы пишете номер 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! 
  • Рекурсивно преобразовать граф объекта python в словарь
  • Получить все атрибуты объектов в Python?
  • Сортированный по длине список, но такой же длины в алфавитном порядке на этапе
  • Исключение с оригинальной трассировкой - совместимая версия 2.6-3.X
  • Ошибка: не найдено подходящего распределения для pip
  • Setup.py: установить lxml с Python2.6 на CentOS
  • Почему Python 2.6 добавил глобальную функцию next ()?
  • Регулярное выражение для соответствия разделенному запятыми списку ключа = значение, в котором значение может содержать запятые
  •  
    Interesting Posts for Van-Lav

    Группируйте произвольные объекты даты, которые находятся в пределах временного диапазона друг от друга

    Метки / названия Matplotlib исчезают при экспорте в формате eps

    Scrapy and Selenium: только лом две страницы

    Активация режима оптимизации Python с помощью аргумента командной строки на уровне скрипта

    Нечувствительные к регистру уникальные поля модели в Django?

    Может ли временный файл flymake быть создан во временном каталоге системы?

    Python Pandas: транспонирование или стеки?

    Django: изменение размера изображения перед загрузкой

    Как изменить размер фигуры боке

    Данные и скорость передачи данных Pandas

    Сериализация двоичных данных в Python

    Расположение центроида (центра масс) сферических многоугольников

    Сравнение контрольных сумм TCP с Scapy?

    Как сделать завершающую косую черту необязательной с помощью webapp2?

    Преобразование списка деревьев в иерархию dict

    Python - лучший язык программирования в мире.