Heim > Backend-Entwicklung > Python-Tutorial > Nützliche, aber selten verwendete Betriebssystemfunktionen in Python

Nützliche, aber selten verwendete Betriebssystemfunktionen in Python

Patricia Arquette
Freigeben: 2024-11-15 11:01:03
Original
1041 Leute haben es durchsucht

Useful but Rarely Used OS Functions in Python

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.

os.path.commonpath()

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)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Code gibt uns den gemeinsamen Pfad dieser beiden Pfade.

Common Path: /user/data
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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.")
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

os.scandir()

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()}")
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren

os.path.splitext()

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}")
Nach dem Login kopieren
Nach dem Login kopieren

Ausgabe

Root: report 
Extension: .csv
Nach dem Login kopieren
Nach dem Login kopieren

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}")
Nach dem Login kopieren

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
Nach dem Login kopieren

os.makedirs()

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)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir dieses Programm ausführen, erstellt es bestimmte Verzeichnisse und Unterverzeichnisse.

Common Path: /user/data
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir das obige Programm erneut ausführen, wird aufgrund von exist_ok=True kein Fehler ausgegeben.

os.replace()

Ä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.")
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

os.urandom()

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()}")
Nach dem Login kopieren
Nach dem Login kopieren

Ausgabe

.idea : 
>>>> Is File: False 
>>>> Is Directory: True
main.py : 
>>>> Is File: True 
>>>> Is Directory: False
sample.py : 
>>>> Is File: True 
>>>> Is Directory: False
Nach dem Login kopieren
Nach dem Login kopieren

os.path.samefile()

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}")
Nach dem Login kopieren
Nach dem Login kopieren

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()

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
Nach dem Login kopieren
Nach dem Login kopieren

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)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das bedeutet, dass wir drei Verzeichnisse nach oben und dann nach unten zu engine/log.py gehen müssen.

os.fsync()

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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.

os.get_terminal_size()

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.")
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage