Lerne Coding
Das OS-Modul in Python verwenden, so geht es!
15.07.2019

Wofür kann ich das OS Modul in Python nutzen?

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]
access_timeGeschätzte Lesezeit ca. 5 Minuten

Das OS Modul in Python gibt dir Zugriff auf einige Funktionen des Betriebssystems (Operatingsystem). Dieses Python Module ist standardmäßig in Python implementiert. Das heißt, es muss nicht nachträglich installiert werden (bspw. mit pip).

Das Modul hilft bei der Interaktion mit dem Betriebssystem. So sind plattformunabhängige Programme etwas einfacher zu gestalten. Programme können dadurch auf den verschiedenen Betriebssystemen, zum Beispiel unter Linux, Mac oder auch Windows, einfacher zum Laufen gebracht werden, ganz ohne größere Änderungen.

Um mit Verzeichnissen/Dateien/Ordnern zu arbeiten, ist das OS Module eine ausgezeichnete Wahl. Es eignet sich hervorragend, um zu selektieren, umzubenennen oder zu löschen.

Die folgenden Möglichkeiten des Os Moduls in Python werden wir im Nachhinein genauer behandeln:

  • os.name
  • os.getcwd()
  • os.chdir(path)
  • os.getenv(key)
  • os.environ
  • os.listdir(path)
  • os.remove(path)
  • os.rename(old,new)
  • os.system(command)
  • os.path.isfile(src)
  • os.path.isdir(src)

Eine Übersicht über die Möglichkeiten des OS Moduls

Nun wollen wir beginnen mit einer Übersicht über alle relevanten Funktionen. Das Modul muss über einen "import" zuerst aufgerufen werden.

import os

os.name

Die Variable os.name gibt immer den Namen des Betriebssystems zurück. Entweder "nt" für Windows oder "posix" für Linux/Unix. Achtung: Mac ist ein auf Unix basierendes Betriebssystem. Deshalb gibt das OS Modul hier ebenfalls "posix" zurück. Für eine genauere Differenzierung wird ein weiteres Modul benötigt.

os.getcwd()

Die Funktion getcwd() liefert das aktuelle Arbeitsverzeichnis des Python Scripts zurück. Diese ist der Ort, von wo das Python Script gestartet wird; nicht der Ort, wo die Datei des Scripts liegt. Die Bezeichnung "cwd" steht für "current working directory".

os.chdir(path)

Mit dieser Funktion chdir() kann das "current working directory" beliebig geändert werden. Dies ist zum Beispiel nützlich, wenn man Arbeitsdateien immer von einem bestimmten Punkt aus schnell ablegen will.

os.getenv(key)

Mittels der Funktion getenv() können verschiedene Systemvariablen abgefragt werden. Unter Unix-Betriebssystemen gibt es zum Beispiel die HOME-Variable. Diese enthält immer das Home-Verzeichnis des Nutzers.

os.getcwd("HOME")
# Beispiel Resultat: "/Users/felix"

os.environ

Mit dieser Variable erhaltet ihr ein Dictionary mit allen gesetzten Systemvariablen. Diese ist vor allem dafür interessant, welche Werte ihr mit getenv() unter eurem Betriebssystem abfragen könnt.

os.listdir(path)

Die Funktion listdir() gibt eine Liste mit allen Dateien und Ordnern im Verzeichnis "path" aus. Wenn der Pfad nicht gesetzt ist, dann wird das "current working directory" verwendet.

os.listdir()
# Beispiel Resultat: ['validatory.py', 'OsModule-Terminal.ipynb', 'Lamda.ipynb', 'Lambda - Functions Examples.ipynb', '.ipynb_checkpoints', 'cwd.py', '.idea']

os.remove(path)

Um eine Datei zu löschen, kann die Funktion os.remove() verwendet werden. Zu beachten ist, dass diese Methode sich nicht eignet, um Verzeichnisse zu löschen. Dafür sollte die Funktion rmdir() verwendet werden

os.rename(old,new)

Mit der Funktion rename kannst du Dateien und Ordner umbenennen. Als erster Parameter wird der aktuelle Source erwartet und als zweiter, wie die Datei danach heißen soll.

os.system(command)

Kommen wir zu meiner Lieblingsfunktion vom OS Modul: Mit dem os.system()-Befehl sind Systembefehle zur Ausführung von Automatisierungen spielend leicht.

Zu beachten ist, dass os.system() keinen Output des Befehls zurückgibt, sondern 0 bei Erfolg.

Prüfen mit os.path.isfile(src) und os.path.isdir(src)

Mittels der beiden Methoden os.path.isfile(src) und os.path.isdir(src) kann jeweils geprüft werden, ob es sich bei einer Quelle um ein Verzeichnis oder eine Datei handelt und ob dieses überhaupt existiert.

Vorsicht bei Automatisierung

Leider geben manche Funktionen (wie os.mkdir/rename/rmdir) keine Boolean für Erfolg oder Nichterfolg zurück, weshalb man, zur Kontrolle der erfolgreichen Durchführungen aller Änderungen, eine zusätzliche Sicherheitsvalidierung einbauen sollte.

os.mkdir("src")
# Return: None

os.rename("src","oldSrc")
# Return: None

os.rmdir("oldSrc")
# Return: None

An den obenstehenden Code-Beispielen können wir dieses Verhalten sehr gut beobachten: Wir haben keine Gewissheit, dass unsere Funktion erfolgreich ausgeführt worden ist. Daher ist es sinnvoll, eine zusätzliche Sicherheitsvalidierung auszuführen. Im nachfolgenden Text erfahrt ihr, wie das aussehen kann.

Wie könnte eine Sicherheitsvalidierung in Python aussehen?

In unserem Beispiel nutzen wir os.listdir(), um im Nachhinein einfach die Änderungen zu überprüfen. So können wir sichergehen, dass die Funktion os.mkdir(“Example”) erfolgreich ausgeführt worden ist.

import os

def createDir(name):
    # Funktion zum Erstellen des Verzeichnis
    os.mkdir(name)

    # os.listdir() holt alle Dateien und Verzeichnisse aus dem aktuellen Arbeitsverzeichnis. Es wird geprüft, ob das neue Verzeichnis existiert.
    return name in os.listdir()

# Funktionsaufruf
if createDir("Example"):
    print("Verzeichnis wurde erfolgreich angelegt.")
else:
    print("Das Verzeichnis wurde nicht erstellt")

# Output "Verzeichnis wurde erfolgreich angelegt."

Der "in"-Operator ist eine einfache Möglichkeit abzufragen, ob etwas in einem String oder in einer Liste vorhanden ist.

Wenn der Return-Wert eine List ist, wird geprüft, ob "x" in der Liste als Value vorhanden ist. Bei einem String wird geprüft, ob ein Teil des Strings "x" entspricht; in diesem Fall wird True zurückgegeben, andernfalls False.

Wofür eignet sich das OS Module nicht?

Eine Funktion gibt es im Modul, die ich oft nicht ausreichend finde. Je nach Anwendungszweck macht es Sinn, dort auf eine bessere Funktion aus einem anderen Modul zurückzugreifen.

Bei dieser Funktion handelt es sich um os.name. Auf den ersten Blick scheint man bei os.name Windows 10 oder zumindest Windows zu erhalten. Doch tatsächlich täuscht dieser Eindruck: Die Funktion gibt unter Windows, beispielsweise Windows 10 oder Vista, unter anderem “nt” zurück. Natürlich kann man darüber keine Differenzierung stattfinden lassen.

Dafür gibt es zwei deutlich bessere Methoden:

import platform

platform.system()
# Return: Darwin 
# Darwin steht für Mac

platform.release()
# Return: 19.3.0 
# Aktuelle Version von MacOS auf meinem MacBook

import sys

sys.platform
# Return: darwin
# Allerdings sehr ähnlich zum platform.system() Befehl

Das OS Module ist ungeeignet, um die Betriebssystemversion oder den Betriebssystemnamen ordentlich zu benennen. Für einen groben Check eignet sich das Sys Module besser, für detaillierte Informationen empfiehlt sich das Platform Module.

Fazit

Das Os Modul (Operatingsystem) hält Möglichkeiten bereit, um mit Dateien und Verzeichnissen zu arbeiten oder einfach einmal einen System Command auszuführen. Meistens verwende ich es bei Automatisierungsprojekten. Wo ist es für dich nicht wegzudenken? Oder hast du das Os Modul in Python gerade erst für dich entdeckt?

Kommentare zum Artikel

Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "Das OS-Modul in Python verwenden, so geht es!"!

Kommentar schreiben

Vom Autor Empfohlen
close