【发布时间】:2013-09-19 08:22:25
【问题描述】:
我希望使用存储在配置文件中的文件掩码更改文件的权限。由于 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)
有没有更简单的方法来做到这一点?
【问题讨论】:
-
不要将八进制文字符号与整数 值 混淆;
0o644仍然是十进制的 420。0x1a4也是如此,即使它使用十六进制表示法。 Python 仍然为任何一个存储 420,只是您对解释器的拼写不同。一旦读取,Python 不会将其存储为八进制或十六进制。 -
八进制表示法只是使读取值变得更容易,然后数字与权限整齐排列。
420不容易告诉读者世界、组和用户权限是什么。os.chmod不需要 八进制数。它需要一个整数,但将它写成八进制只会让 人类 更容易读回它。 -
我确实明白以 8 为基数表示法中的 0o644 与以 10 为基数表示法中的 420 是相同的数字。对于您的第二条评论,可读性是问题的重点。但是,我没有充分考虑 os.chmod() 的用法,我没有意识到 os.chmod() 方法不需要八进制格式的整数。感谢您指出这一点。
标签: python python-2.6