Sie müssen in Ihren Projekten mehrmals Funktionen verwendet haben, die vom OS-Modul in Python bereitgestellt werden. Diese können zum Erstellen einer Datei, zum Durchsuchen eines Verzeichnisses, zum Abrufen von Informationen zum aktuellen Verzeichnis, zum Durchführen von Pfadoperationen und mehr verwendet werden.
In diesem Artikel besprechen wir die Funktionen, die genauso nützlich sind wie jede Funktion im OS-Modul, aber selten verwendet werden.
Wenn Sie mit mehreren Dateien arbeiten, die eine gemeinsame Verzeichnisstruktur haben, möchten Sie möglicherweise den längsten gemeinsamen Pfad ermitteln. os.path.commonpath() macht genau das. Dies kann beim Organisieren von Dateien oder beim Umgang mit unterschiedlichen Pfaden in verschiedenen Umgebungen hilfreich sein.
Hier ist ein Beispiel:
import os paths = ['/user/data/project1/file1.txt', '/user/data/project2/file2.txt'] common_path = os.path.commonpath(paths) print("Common Path:", common_path)
Dieser Code gibt uns den gemeinsamen Pfad dieser beiden Pfade.
Common Path: /user/data
Sie können sehen, dass os.path.commonpath() eine Liste von Pfadnamen benötigt, deren manuelles Aufschreiben möglicherweise unpraktisch ist.
In diesem Fall ist es am besten, alle Verzeichnisse, Unterverzeichnisse und Dateinamen zu durchlaufen und dann nach dem gemeinsamen Pfad zu suchen.
import os def get_file_paths(directory, file_extension=None): # Collect all file paths in the directory (and subdirectories, if any) file_paths = [] for root, dirs, files in os.walk(directory): for file in files: if file_extension is None or file.endswith(file_extension): file_paths.append(os.path.join(root, file)) return file_paths # Specify the root directory to start from directory_path = 'D:/SACHIN/Pycharm/Flask-Tutorial' # If you want to filter by file extension file_paths = get_file_paths(directory_path, file_extension='.html') # Find the common path among all files if file_paths: common_path = os.path.commonpath(file_paths) print("Common Path:", common_path) else: print("No files found in the specified directory.")
In diesem Beispiel durchläuft die Funktion get_file_paths() ein Verzeichnis von oben nach unten und hängt alle in der Dateipfadliste gefundenen Pfade an. Diese Funktion akzeptiert optional eine Dateierweiterung, wenn wir nach bestimmten Dateien Ausschau halten möchten.
Jetzt können wir ganz einfach den gemeinsamen Pfad jedes Verzeichnisses finden.
Common Path: D:\SACHIN\Pycharm\Flask-Tutorial\templates
Wenn Sie os.listdir() verwenden, um den Inhalt eines Verzeichnisses abzurufen, sollten Sie stattdessen die Verwendung von os.scandir() in Betracht ziehen. Es ist nicht nur schneller, sondern gibt auch DirEntry-Objekte zurück, die nützliche Informationen wie Dateitypen, Berechtigungen und ob es sich bei dem Eintrag um eine Datei oder ein Verzeichnis handelt.
Hier ist ein Beispiel:
import os with os.scandir('D:/SACHIN/Pycharm/osfunctions') as entries: for entry in entries: print(f"{entry.name} : \n" f">>>> Is File: {entry.is_file()} \n" f">>>> Is Directory: {entry.is_dir()}")
In diesem Beispiel haben wir os.scandir() verwendet und ein Verzeichnis übergeben und dann haben wir dieses Verzeichnis durchlaufen und die Informationen gedruckt.
.idea : >>>> Is File: False >>>> Is Directory: True main.py : >>>> Is File: True >>>> Is Directory: False sample.py : >>>> Is File: True >>>> Is Directory: False
Angenommen, Sie arbeiten mit Dateien und müssen deren Erweiterung überprüfen. Hilfe erhalten Sie von der Funktion os.path.splitext(). Es teilt den Dateipfad in Stammverzeichnis und Erweiterung auf, was Ihnen bei der Bestimmung des Dateityps helfen kann.
import os filename = 'report.csv' root, ext = os.path.splitext(filename) print(f"Root: {root} \n" f"Extension: {ext}")
Ausgabe
Root: report Extension: .csv
Schauen Sie sich einige Fälle an, in denen Pfade seltsam sein können, und sehen Sie sich dann an, wie os.path.splitext() funktioniert.
import os filename = ['.report', 'report', 'report.case.txt', 'report.csv.zip'] for idx, paths in enumerate(filename): root, ext = os.path.splitext(paths) print(f"{idx} - {paths}\n" f"Root: {root} | Extension: {ext}")
Ausgabe
0 - .report Root: .report | Extension: 1 - report Root: report | Extension: 2 - report.case.txt Root: report.case | Extension: .txt 3 - report.csv.zip Root: report.csv | Extension: .zip
Es gibt bereits eine häufig verwendete Funktion, mit der wir Verzeichnisse erstellen können. Aber was ist, wenn Sie verschachtelte Verzeichnisse erstellen?
Das Erstellen verschachtelter Verzeichnisse kann mit os.mkdir() mühsam sein, da jeweils nur ein Verzeichnis erstellt wird. Mit os.makedirs() können Sie mehrere verschachtelte Verzeichnisse auf einmal erstellen, und das Argument exist_ok=True stellt sicher, dass kein Fehler ausgegeben wird, wenn das Verzeichnis bereits existiert.
import os paths = ['/user/data/project1/file1.txt', '/user/data/project2/file2.txt'] common_path = os.path.commonpath(paths) print("Common Path:", common_path)
Wenn wir dieses Programm ausführen, erstellt es bestimmte Verzeichnisse und Unterverzeichnisse.
Common Path: /user/data
Wenn wir das obige Programm erneut ausführen, wird aufgrund von exist_ok=True kein Fehler ausgegeben.
Ähnlich wie os.rename() verschiebt os.replace() eine Datei an einen neuen Speicherort, überschreibt jedoch sicher alle vorhandenen Dateien am Ziel. Dies ist hilfreich für Aufgaben, bei denen Sie Dateien aktualisieren oder sichern und sicherstellen möchten, dass alte Dateien sicher ersetzt werden.
import os def get_file_paths(directory, file_extension=None): # Collect all file paths in the directory (and subdirectories, if any) file_paths = [] for root, dirs, files in os.walk(directory): for file in files: if file_extension is None or file.endswith(file_extension): file_paths.append(os.path.join(root, file)) return file_paths # Specify the root directory to start from directory_path = 'D:/SACHIN/Pycharm/Flask-Tutorial' # If you want to filter by file extension file_paths = get_file_paths(directory_path, file_extension='.html') # Find the common path among all files if file_paths: common_path = os.path.commonpath(file_paths) print("Common Path:", common_path) else: print("No files found in the specified directory.")
In diesem Code wird die Datei main.py genau wie die Funktion os.rename() in new_main.py umbenannt, aber dieser Vorgang ist so, als würde man alles oder nichts nehmen. Das bedeutet, dass die Dateiersetzung in einem einzigen, unteilbaren Schritt erfolgt, sodass entweder der gesamte Vorgang erfolgreich ist oder sich überhaupt nichts ändert.
Common Path: D:\SACHIN\Pycharm\Flask-Tutorial\templates
Für kryptografische Zwecke benötigen Sie eine sichere Quelle zufälliger Daten. os.urandom() generiert zufällige Bytes, die sich beispielsweise für die Generierung zufälliger IDs, Tokens oder Passwörter eignen. Es ist sicherer als das Zufallsmodul für sensible Daten.
os.urandom() nutzt Zufälligkeiten, die von dem von Ihnen verwendeten Betriebssystem aus verschiedenen Ressourcen generiert werden, um Bytes (Daten) unvorhersehbar zu machen.
In Windows wird BCryptGenRandom() verwendet, um zufällige Bytes zu generieren.
import os with os.scandir('D:/SACHIN/Pycharm/osfunctions') as entries: for entry in entries: print(f"{entry.name} : \n" f">>>> Is File: {entry.is_file()} \n" f">>>> Is Directory: {entry.is_dir()}")
Ausgabe
.idea : >>>> Is File: False >>>> Is Directory: True main.py : >>>> Is File: True >>>> Is Directory: False sample.py : >>>> Is File: True >>>> Is Directory: False
Die Funktion os.path.samefile() in Python wird verwendet, um zu überprüfen, ob zwei Pfade auf die gleiche Datei oder das Verzeichnis im Dateisystem verweisen. Dies ist besonders hilfreich in Szenarien, in denen mehrere Pfade auf dieselbe physische Datei verweisen könnten, beispielsweise beim Umgang mit symbolischen Links, Hardlinks oder unterschiedlichen absoluten und relativen Pfaden zum selben Speicherort.
import os filename = 'report.csv' root, ext = os.path.splitext(filename) print(f"Root: {root} \n" f"Extension: {ext}")
os.path.samefile() ist so konzipiert, dass es nur dann „True“ zurückgibt, wenn beide Pfade auf die gleiche Datei auf der Festplatte verweisen, beispielsweise eine Datei, die mit denselben Daten im Dateisystem fest oder symbolisch verknüpft ist.
os.path.relpath() ist eine Berechnungsfunktion, die den relativen Pfad zwischen zwei Pfaden berechnet. Dies ist besonders nützlich, wenn Sie Dateipfade dynamisch erstellen oder mit relativen Importen arbeiten.
Betrachten Sie das folgende Beispiel:
Root: report Extension: .csv
In diesem Beispiel haben wir target_path, der einen Pfad enthält, zu dem wir navigieren müssen, und start_path enthält einen Pfad, von dem aus wir mit der Berechnung des relativen Pfads zu target_path beginnen müssen.
Wenn wir dies ausführen, erhalten wir die folgende Ausgabe.
import os paths = ['/user/data/project1/file1.txt', '/user/data/project2/file2.txt'] common_path = os.path.commonpath(paths) print("Common Path:", common_path)
Das bedeutet, dass wir drei Verzeichnisse nach oben und dann nach unten zu engine/log.py gehen müssen.
Wenn wir einen Dateischreibvorgang (file.write()) durchführen, werden die Daten nicht sofort auf der Festplatte gespeichert, sondern im Puffer des Systems. Wenn etwas Unerwartetes passiert, bevor die Daten auf die Festplatte geschrieben werden, werden die Daten gespeichert Daten gehen verloren.
os.fsync() erzwingt das Schreiben der Daten und stellt so die Datenintegrität sicher. Dies ist besonders nützlich bei der Protokollierung oder beim Schreiben kritischer Daten, die nicht verloren gehen dürfen.
Common Path: /user/data
os.fsync(f.fileno()) wird aufgerufen, um sicherzustellen, dass die Daten sofort auf die Festplatte geschrieben werden und nicht im Puffer verbleiben.
os.fsync() benötigt den Dateideskriptor, deshalb haben wir f.fileno() übergeben, eine eindeutige Ganzzahl, die vom System der Datei zugewiesen wird, mit der wir arbeiten.
Wenn Sie CLI-Tools erstellen, kann die Ausgabe sauberer sein, indem Sie sie so formatieren, dass sie der Terminalbreite entspricht. os.get_terminal_size() gibt Ihnen die aktuelle Terminalbreite und -höhe an und erleichtert so die dynamische Formatierung von Inhalten.
import os def get_file_paths(directory, file_extension=None): # Collect all file paths in the directory (and subdirectories, if any) file_paths = [] for root, dirs, files in os.walk(directory): for file in files: if file_extension is None or file.endswith(file_extension): file_paths.append(os.path.join(root, file)) return file_paths # Specify the root directory to start from directory_path = 'D:/SACHIN/Pycharm/Flask-Tutorial' # If you want to filter by file extension file_paths = get_file_paths(directory_path, file_extension='.html') # Find the common path among all files if file_paths: common_path = os.path.commonpath(file_paths) print("Common Path:", common_path) else: print("No files found in the specified directory.")
Wenn wir diesen Code im Terminal ausführen, erhalten wir die Größe des Terminals, auf dem wir dieses Skript ausführen.
Common Path: D:\SACHIN\Pycharm\Flask-Tutorial\templates
Hinweis: Möglicherweise erhalten Sie eine Fehlermeldung, wenn Sie das Skript direkt in der IDE ausführen, wo das Programm keinen Zugriff auf das Terminal hat.
?Andere Artikel, die Sie interessieren könnten, wenn Ihnen dieser gefallen hat
✅Streaming von Videos im Frontend in FastAPI.
✅So beheben Sie zirkuläre Importe in Python.
✅Vorlagenvererbung in Flask.
✅Wie verwende ich Typhinweise in Python?
✅Wie finde und lösche ich nicht übereinstimmende Spalten aus Datensätzen in Pandas?
✅Wie wirkt sich die Lernrate auf die ML- und DL-Modelle aus?
Das ist alles für den Moment.
Codieren Sie weiter✌✌.
Das obige ist der detaillierte Inhalt vonNützliche, aber selten verwendete Betriebssystemfunktionen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!