Wie man prüft, ob eine Datei in Python schreibbar ist

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie in Python prüfen können, ob eine Datei beschreibbar ist. Das Lab konzentriert sich auf das Verständnis von Dateischreibberechtigungen in einer Linux-Umgebung und zeigt zwei Methoden zur Überprüfung des Schreibzugriffs.

Zunächst werden Sie die Linux-Dateiberechtigungen untersuchen, einschließlich der Konzepte von Besitzer, Gruppe und anderen, sowie der Lese-, Schreib- und Ausführungsberechtigungen. Sie erstellen eine Datei, untersuchen ihre Standardberechtigungen mit ls -l und interpretieren die Ausgabe. Dann lernen Sie, wie Sie os.access() mit os.W_OK verwenden und versuchen, die Datei zum Schreiben zu öffnen, um ihre Schreibbarkeit in Python zu bestimmen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/FileHandlingGroup -.-> python/file_opening_closing("Opening and Closing Files") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") python/FileHandlingGroup -.-> python/file_operations("File Operations") python/PythonStandardLibraryGroup -.-> python/os_system("Operating System and System") subgraph Lab Skills python/build_in_functions -.-> lab-559514{{"Wie man prüft, ob eine Datei in Python schreibbar ist"}} python/catching_exceptions -.-> lab-559514{{"Wie man prüft, ob eine Datei in Python schreibbar ist"}} python/file_opening_closing -.-> lab-559514{{"Wie man prüft, ob eine Datei in Python schreibbar ist"}} python/file_reading_writing -.-> lab-559514{{"Wie man prüft, ob eine Datei in Python schreibbar ist"}} python/file_operations -.-> lab-559514{{"Wie man prüft, ob eine Datei in Python schreibbar ist"}} python/os_system -.-> lab-559514{{"Wie man prüft, ob eine Datei in Python schreibbar ist"}} end

Über Schreibberechtigungen lernen

In diesem Schritt werden wir das Konzept der Schreibberechtigungen in der Linux-Umgebung untersuchen. Das Verständnis von Dateiberechtigungen ist entscheidend für die Kontrolle des Zugriffs auf Ihre Dateien und Verzeichnisse. Insbesondere die Schreibberechtigung bestimmt, ob Sie eine Datei oder ein Verzeichnis ändern können.

In Linux hat jede Datei und jedes Verzeichnis eine Reihe von Berechtigungen für drei Kategorien von Benutzern:

  • Besitzer: Der Benutzer, der die Datei oder das Verzeichnis besitzt.
  • Gruppe: Die Gruppe, zu der die Datei oder das Verzeichnis gehört.
  • Andere: Alle anderen Benutzer auf dem System.

Für jede Kategorie gibt es drei Arten von Berechtigungen:

  • Lesezugriff (r): Erlaubt es Ihnen, den Inhalt einer Datei anzuzeigen oder die Inhalte eines Verzeichnisses aufzulisten.
  • Schreibzugriff (w): Erlaubt es Ihnen, eine Datei zu ändern oder Dateien innerhalb eines Verzeichnisses zu erstellen, zu löschen oder umzubenennen.
  • Ausführungsrecht (x): Erlaubt es Ihnen, eine Datei auszuführen (wenn es sich um ein Programm handelt) oder in ein Verzeichnis zu wechseln.

Beginnen wir damit, eine Datei zu erstellen und ihre Standardberechtigungen zu untersuchen. Öffnen Sie den VS Code-Editor und erstellen Sie eine neue Datei namens my_file.txt im Verzeichnis ~/project. Sie können die Datei vorerst leer lassen.

Als nächstes öffnen Sie das Terminal und navigieren Sie zum Verzeichnis ~/project:

cd ~/project

Nun verwenden wir den Befehl ls -l, um die Berechtigungen der Datei anzuzeigen:

ls -l my_file.txt

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

-rw-rw-r-- 1 labex labex 0 Oct 26 14:35 my_file.txt

Lassen Sie uns diese Ausgabe analysieren:

  • Das erste Zeichen (-) gibt an, dass es sich um eine Datei handelt (im Gegensatz zu einem Verzeichnis, das mit d gekennzeichnet wäre).
  • Die nächsten neun Zeichen (rw-rw-r--) repräsentieren die Berechtigungen.
    • Die ersten drei (rw-) sind die Berechtigungen des Besitzers (Lese- und Schreibzugriff).
    • Die nächsten drei (rw-) sind die Berechtigungen der Gruppe (Lese- und Schreibzugriff).
    • Die letzten drei (r--) sind die Berechtigungen für andere (nur Lesezugriff).
  • 1 gibt die Anzahl der Hardlinks zur Datei an.
  • labex labex sind der Name des Besitzers und der Gruppe.
  • 0 ist die Dateigröße in Bytes.
  • Oct 26 14:35 ist der Zeitstempel der letzten Änderung.
  • my_file.txt ist der Dateiname.

Derzeit haben der Besitzer (Sie als labex) und die Gruppe Lese- und Schreibberechtigungen, während andere nur Lesezugriff haben. Das bedeutet, dass Sie die Datei ändern können, andere Benutzer auf dem System können sie jedoch nur anzeigen.

Nun versuchen wir, die Schreibberechtigung für den Besitzer mit dem Befehl chmod zu entfernen. chmod wird verwendet, um Dateiberechtigungen zu ändern.

chmod u-w my_file.txt

Hier bedeutet u-w "Entferne die Schreibberechtigung für den Besitzer".

Nun überprüfen wir die Berechtigungen erneut:

ls -l my_file.txt

Die Ausgabe sollte nun wie folgt aussehen:

-r--rw-r-- 1 labex labex 0 Oct 26 14:35 my_file.txt

Beachten Sie, dass die Berechtigungen des Besitzers jetzt r-- sind, was auf einen Nur-Lese-Zugriff hinweist.

In den nächsten Schritten werden wir sehen, wie man mit Python prüft, ob Schreibberechtigungen vorhanden sind und wie man Situationen behandelt, in denen diese nicht verfügbar sind.

Verwendung von os.access() mit os.W_OK

Im vorherigen Schritt haben wir uns mit Dateiberechtigungen vertraut gemacht und gelernt, wie man sie mit dem chmod-Befehl ändern kann. Jetzt wollen wir untersuchen, wie man mit Python programmgesteuert prüfen kann, ob eine Datei Schreibberechtigungen hat. Die Funktion os.access() in Kombination mit der Konstante os.W_OK ermöglicht uns genau das.

Die Funktion os.access() nimmt zwei Argumente:

  • path: Der Pfad zur Datei oder zum Verzeichnis, das Sie überprüfen möchten.
  • mode: Eine Ganzzahl, die die zu überprüfende(n) Berechtigung(en) darstellt.

Die Konstante os.W_OK repräsentiert die Schreibberechtigung. Wenn sie mit os.access() verwendet wird, prüft sie, ob die angegebene Datei oder das Verzeichnis für den aktuellen Benutzer beschreibbar ist.

Lassen Sie uns ein Python-Skript erstellen, um dies zu demonstrieren. Öffnen Sie den VS Code-Editor und erstellen Sie eine neue Datei namens check_write_permission.py im Verzeichnis ~/project.

Fügen Sie der Datei folgenden Code hinzu:

import os

file_path = "my_file.txt"

if os.access(file_path, os.W_OK):
    print(f"The file '{file_path}' is writable.")
else:
    print(f"The file '{file_path}' is not writable.")

So funktioniert der Code:

  1. Es importiert das os-Modul, das Funktionen für die Interaktion mit dem Betriebssystem bereitstellt.
  2. Es definiert eine Variable file_path, die den Namen der Datei speichert, die wir überprüfen möchten (hier my_file.txt, die im vorherigen Schritt erstellt wurde).
  3. Es verwendet os.access(file_path, os.W_OK), um zu prüfen, ob die Datei beschreibbar ist.
  4. Es gibt eine Nachricht aus, die angibt, ob die Datei beschreibbar ist oder nicht.

Jetzt lassen Sie uns das Skript ausführen. Öffnen Sie das Terminal und navigieren Sie zum Verzeichnis ~/project (falls Sie nicht bereits dort sind):

cd ~/project

Führen Sie dann das Python-Skript aus:

python check_write_permission.py

Da wir im vorherigen Schritt die Schreibberechtigungen für den Besitzer entfernt haben, sollte die Ausgabe wie folgt lauten:

The file 'my_file.txt' is not writable.

Jetzt geben wir dem Besitzer die Schreibberechtigungen für die Datei wieder zurück:

chmod u+w my_file.txt

Und führen wir das Python-Skript erneut aus:

python check_write_permission.py

Diesmal sollte die Ausgabe wie folgt lauten:

The file 'my_file.txt' is writable.

Dies zeigt, wie Sie os.access() und os.W_OK verwenden können, um programmgesteuert Schreibberechtigungen in Python zu prüfen. Dies ist nützlich für das Schreiben von Programmen, die Dateien ändern müssen, aber zunächst sicherstellen müssen, dass sie die erforderlichen Berechtigungen haben.

Versuch, eine Datei zum Schreiben zu öffnen

In diesem Schritt werden wir sehen, was passiert, wenn wir versuchen, eine Datei zum Schreiben zu öffnen, ohne die erforderlichen Berechtigungen zu haben. Dies wird uns helfen, zu verstehen, wie Python Berechtigungsfehler behandelt.

Zunächst entfernen wir erneut die Schreibberechtigung von my_file.txt:

chmod u-w my_file.txt

Jetzt erstellen wir ein Python-Skript, das versucht, die Datei zum Schreiben zu öffnen. Öffnen Sie den VS Code-Editor und erstellen Sie eine neue Datei namens attempt_write.py im Verzeichnis ~/project.

Fügen Sie der Datei folgenden Code hinzu:

file_path = "my_file.txt"

try:
    with open(file_path, "w") as f:
        f.write("This is a test.")
    print("File written successfully.")
except Exception as e:
    print(f"Error writing to file: {e}")

So funktioniert der Code:

  1. Es definiert eine Variable file_path, die den Namen der Datei speichert, in die wir schreiben möchten.
  2. Es verwendet einen try...except-Block, um potenzielle Fehler zu behandeln.
  3. Innerhalb des try-Blocks versucht es, die Datei im Schreibmodus ("w") zu öffnen.
  4. Wenn die Datei erfolgreich geöffnet wird, schreibt es die Zeichenkette "This is a test." in die Datei.
  5. Wenn ein Fehler auftritt (z. B. aufgrund fehlender Schreibberechtigungen), fängt der except-Block die Ausnahme ab und gibt eine Fehlermeldung aus.

Jetzt führen wir das Skript aus:

python attempt_write.py

Da wir die Schreibberechtigungen entfernt haben, sollten Sie eine Ausgabe ähnlich der folgenden sehen:

Error writing to file: [Errno 13] Permission denied: 'my_file.txt'

Dies bestätigt, dass Python einen PermissionError (genauer gesagt Errno 13) auslöst, wenn wir versuchen, eine Datei zum Schreiben zu öffnen, ohne die erforderlichen Berechtigungen.

Jetzt stellen wir die Schreibberechtigungen wieder her:

chmod u+w my_file.txt

Und führen wir das Skript erneut aus:

python attempt_write.py

Diesmal sollte die Ausgabe wie folgt lauten:

File written successfully.

Und wenn Sie den Inhalt von my_file.txt überprüfen, werden Sie sehen, dass es jetzt den Text "This is a test." enthält:

cat my_file.txt
This is a test.

Dies zeigt, wie Python Berechtigungsfehler behandelt, wenn versucht wird, eine Datei zum Schreiben zu öffnen. Es ist wichtig, try...except-Blöcke zu verwenden, um diese Fehler abzufangen und sie in Ihren Programmen gracefully zu behandeln.

Zusammenfassung

In diesem Lab haben wir zunächst das Konzept der Schreibberechtigungen in Linux untersucht und verstanden, dass diese Berechtigungen die Fähigkeit zur Modifikation von Dateien und Verzeichnissen steuern. Wir haben über die drei Benutzerkategorien (Besitzer, Gruppe, andere) und die drei Arten von Berechtigungen (Lesen, Schreiben, Ausführen) gelernt.

Anschließend haben wir eine Datei namens my_file.txt erstellt und den Befehl ls -l verwendet, um ihre Standardberechtigungen zu untersuchen. Wir haben die Ausgabe analysiert, um zu verstehen, wie die Berechtigungen für jede Benutzerkategorie dargestellt werden. Dies hat uns eine Grundlage gegeben, um zu verstehen, wie man programmgesteuert Schreibberechtigungen in Python prüfen kann.