| title | Python OS Modul - Python Spickzettel |
|---|---|
| description | Dieses Modul bietet eine portable Möglichkeit zur Nutzung betriebssystemabhängiger Funktionen. |
Dieses Modul bietet eine portable Möglichkeit, betriebssystemabhängige Funktionalität zu nutzen.
Pathlib vs OS Modul Das pathlib-Modul bietet weitaus mehr Funktionalität als die hier aufgeführten, wie z.B. das Abrufen des Dateinamens, das Abrufen der Dateiendung, das Lesen/Schreiben einer Datei ohne manuelles Öffnen usw. Sehen Sie sich die offizielle Dokumentation an, wenn Sie mehr erfahren möchten.Für einen tiefergehenden Blick auf beide, siehe die Seite Datei- und Verzeichnispfade.
Unter Windows werden Pfade mit Backslashes (\) als Trennzeichen zwischen Ordnernamen geschrieben. Auf Unix-basierten Betriebssystemen wie macOS, Linux und BSDs wird der Schrägstrich (/) als Pfadtrennzeichen verwendet. Das Zusammenfügen von Pfaden kann mühsam sein, wenn Ihr Code auf verschiedenen Plattformen funktionieren muss.
Glücklicherweise bietet uns Python os.path.join, um dies zu handhaben.
import os
# Pfadkomponenten unter Verwendung des korrekten Trennzeichens für das Betriebssystem zusammenfügen
os.path.join('usr', 'bin', 'spam')usr\bin\spam
Das Zusammenfügen von Pfaden ist hilfreich, wenn Sie verschiedene Dateipfade unter demselben Verzeichnis erstellen müssen.
my_files = ['accounts.txt', 'details.csv', 'invite.docx']
# Jeden Dateinamen mit dem Basisverzeichnis zusammenfügen
for filename in my_files:
print(os.path.join('/home/labex/project', filename))/home/labex/project/accounts.txt
/home/labex/project/details.csv
/home/labex/project/invite.docx
import os
# Das aktuelle Arbeitsverzeichnis abrufen
os.getcwd()/home/labex/project
# Das aktuelle Arbeitsverzeichnis ändern
os.chdir('/usr/bin')
# Die Änderung überprüfen
os.getcwd()/usr/bin
import os
# Verzeichnisse rekursiv erstellen (erstellt alle übergeordneten Verzeichnisse, falls erforderlich)
os.makedirs('/tmp/delicious/walnut/waffles')Es gibt zwei Möglichkeiten, einen Dateipfad anzugeben.
- Ein absoluter Pfad, der immer mit dem Stammverzeichnis beginnt
- Ein relativer Pfad, der sich auf das aktuelle Arbeitsverzeichnis des Programms bezieht
Es gibt auch die Ordner Punkt (.) und Punkt-Punkt (..). Dies sind keine echten Ordner, sondern spezielle Namen, die in einem Pfad verwendet werden können. Ein einzelner Punkt (“dot”) für einen Ordnernamen ist eine Kurzform für „dieses Verzeichnis“. Zwei Punkte (“dot-dot”) bedeuten „das übergeordnete Verzeichnis“.
Um zu sehen, ob ein Pfad ein absoluter Pfad ist:
import os
# Prüfen, ob der Pfad absolut ist (beginnt mit dem Stammverzeichnis)
os.path.isabs('/')True
# Relative Pfade geben False zurück
os.path.isabs('..')False
Sie können auch einen absoluten Pfad extrahieren:
import os
# Zuerst das aktuelle Verzeichnis abrufen
os.getcwd()/home/labex/project
# Relativen Pfad in einen absoluten Pfad umwandeln
os.path.abspath('..')/home
Sie können einen relativen Pfad von einem Startpfad zu einem anderen Pfad erhalten.
import os
# Relativen Pfad vom Startpfad zum Zielpfad abrufen
os.path.relpath('/etc/passwd', '/')etc/passwd
import os
# Prüfen, ob der Pfad existiert (Datei oder Verzeichnis)
os.path.exists('.')True
os.path.exists('setup.py')True
os.path.exists('/etc')True
os.path.exists('nonexistentfile')False
import os
# Prüfen, ob der Pfad eine Datei ist
os.path.isfile('setup.py')True
os.path.isfile('/home')False
os.path.isfile('nonexistentfile')False
import os
# Prüfen, ob der Pfad ein Verzeichnis ist
os.path.isdir('/')True
os.path.isdir('setup.py')False
os.path.isdir('/spam')False
import os
# Dateigröße in Bytes abrufen
os.path.getsize('/usr/bin/python3')776192
import os
# Alle Dateien und Verzeichnisse im angegebenen Pfad auflisten
os.listdir('/usr/bin')['0409', '12520437.cpx', '12520850.cpx', '5U877.ax', 'aaclient.dll',
--snip--
'xwtpdui.dll', 'xwtpw32.dll', 'zh-CN', 'zh-HK', 'zh-TW', 'zipfldr.dll']
import os
total_size = 0
# Gesamtgröße aller Dateien im Verzeichnis berechnen
for filename in os.listdir('/usr/bin'):
# Verzeichnispfad mit Dateiname zusammenfügen und Größe abrufen
total_size = total_size + os.path.getsize(os.path.join('/usr/bin', filename))
print(total_size)1117846456
-
Der Aufruf von
os.unlink(path)löscht die Datei unter dem Pfad. -
Der Aufruf von
os.rmdir(path)löscht den Ordner unter dem Pfad. Dieser Ordner muss leer von Dateien oder Ordnern sein.
import os
# Rekursiv durch den Verzeichnisbaum durchlaufen
for folder_name, subfolders, filenames in os.walk('/tmp/delicious'):
print(f'Der aktuelle Ordner ist {folder_name}')
# Unterverzeichnisse durchlaufen
for subfolder in subfolders:
print(f'UNTERORDNER VON {folder_name}: {subfolder}')
# Dateien durchlaufen
for filename in filenames:
print(f'DATEI IN {folder_name}: filename{filename}')
print('')Der aktuelle Ordner ist /tmp/delicious
UNTERORDNER VON /tmp/delicious: cats
UNTERORDNER VON /tmp/delicious: walnut
DATEI IN /tmp/delicious: spam.txt
Der aktuelle Ordner ist /tmp/delicious/cats
DATEI IN /tmp/delicious/cats: catnames.txt
DATEI IN /tmp/delicious/cats: zophie.jpg
Der aktuelle Ordner ist /tmp/delicious/walnut
UNTERORDNER VON /tmp/delicious/walnut: waffles
Der aktuelle Ordner ist /tmp/delicious/walnut/waffles
DATEI IN /tmp/delicious/walnut/waffles: butter.txt
- Spickzettel: Datei- & Verzeichnispfad
- Spickzettel: Dateien lesen und schreiben
- Blog: Pathlib Grundlagen
- Modul: pathlib
- open()
- str()