Die Python-Funktion oct(x) wandelt eine Ganzzahl in ihren Oktal-String mit dem Präfix 0o um. Sie ist das oktal-Pendant zu bin() und hex(). Hauptanwendung im Alltag: Unix-Dateirechte (chmod 755 ist eigentlich oktal 0o755), Berechtigungs-Bitmasken und niedrige Hardware-Repräsentation aus historischen C-/Unix-Kontexten.
Einleitung
Das Oktalsystem nutzt acht Ziffern (0–7) und ist im Web- und App-Alltag selten — mit einer wichtigen Ausnahme: Unix-Dateirechte. chmod 644 setzt die Rechte tatsächlich auf das Bitmuster 110 100 100 (rw-r--r--) — und diese drei 3-Bit-Gruppen lassen sich als drei Oktal-Ziffern lesen.
oct() produziert immer Lowercase-Strings mit Präfix 0o. Die Inverse ist int(s, 8). Wer das Präfix nicht möchte, nutzt einen f-String mit :o.
Syntax
oct(x)x Eine Ganzzahl oder ein Objekt mit __index__()-Methode.
Rückgabewert
Ein String der Form "0o..." (Lowercase) bei positiven Zahlen bzw. "-0o..." bei negativen.
Beispiele
Standard-Konvertierung
print(oct(8))
print(oct(64))
print(oct(0))
print(oct(-8))0o10
0o100
0o0
-0o10Unix-Dateirechte verständlich machen
Die häufigste Praxis-Anwendung — Rechte aus os.stat werden als Integer geliefert und sind als Oktal direkt lesbar:
import os, stat
# Beispiel: Modus eines temporären Files
info = os.stat(__file__)
mode = stat.S_IMODE(info.st_mode)
print(f"Bitmuster: {bin(mode)}")
print(f"Oktal: {oct(mode)}")Bitmuster: 0b110100100
Oktal: 0o644Ohne Präfix mit f-String
Wenn das 0o-Präfix stört (z. B. für die Anzeige in Tabellen), reicht der Format-Spezifizierer :o:
print(f"{511:o}") # ohne Präfix
print(f"{511:#o}") # mit Präfix
print(f"{8:04o}") # auf 4 Stellen aufgefüllt777
0o777
0010Praktische Beispiele
chmod-Konvertierung
Die klassische Frage „was bedeutet chmod 750 denn nun?" lässt sich mit oct() und bin() schnell beantworten:
# 750 oktal = rwxr-x---
mode_octal = 0o750
groups = [(mode_octal >> shift) & 0o7 for shift in (6, 3, 0)]
labels = ["Owner", "Gruppe", "Andere"]
for label, bits in zip(labels, groups):
r = "r" if bits & 4 else "-"
w = "w" if bits & 2 else "-"
x = "x" if bits & 1 else "-"
print(f"{label}: {r}{w}{x}")Owner: rwx
Gruppe: r-x
Andere: ---Oktal-String parsen
int(s, 8) ist die Umkehrung von oct() und liefert wieder eine Ganzzahl:
value = int("755", 8)
print(value)
print(oct(value))493
0o755Praktische Hinweise
- Datei-Modi sind oktal: In
os.chmod(pfad, 0o755)ist das0o-Präfix wichtig — sonst wird die Zahl als dezimal interpretiert und die Rechte sind falsch. - Float wird abgelehnt — vorher mit
int()casten. - Verwandte Funktionen:
bin()(binär),hex()(hex),int(s, 8)(Umkehrung). stat-Modul hilft beim sauberen Ausfiltern der Permissions-Bits ausst_mode.