Wie man prüft, ob eine Datei in Python lesbar 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 lesbar ist. Das Lab beginnt mit der Erkundung der Dateiberechtigungen in Linux, wobei der Schwerpunkt auf den Konzepten von Eigentümer, Gruppe und anderen sowie auf den Lesen-, Schreiben- und Ausführungsrechten liegt. Sie erstellen ein Python-Skript, untersuchen seine Berechtigungen mit dem Befehl ls -l und interpretieren die Ausgabe, um zu verstehen, wer Zugang zur Datei hat, um sie zu lesen.

Anschließend werden Sie durch die Verwendung der os.access()-Funktion in Python mit os.R_OK geführt, um programmgesteuert zu bestimmen, ob eine Datei lesbar ist. Abschließend lernen Sie, wie Sie versuchen, die Datei zum Lesen innerhalb eines try...except-Blocks zu öffnen, um potenzielle IOError-Ausnahmen zu behandeln. Dies bietet einen praktischen Ansatz zur Überprüfung der Lesbarkeit von Dateien in Ihrem Python-Code.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") 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") subgraph Lab Skills python/conditional_statements -.-> lab-559513{{"Wie man prüft, ob eine Datei in Python lesbar ist"}} python/standard_libraries -.-> lab-559513{{"Wie man prüft, ob eine Datei in Python lesbar ist"}} python/catching_exceptions -.-> lab-559513{{"Wie man prüft, ob eine Datei in Python lesbar ist"}} python/file_opening_closing -.-> lab-559513{{"Wie man prüft, ob eine Datei in Python lesbar ist"}} python/file_reading_writing -.-> lab-559513{{"Wie man prüft, ob eine Datei in Python lesbar ist"}} python/file_operations -.-> lab-559513{{"Wie man prüft, ob eine Datei in Python lesbar ist"}} end

Dateiberechtigungen verstehen

In diesem Schritt werden wir die Dateiberechtigungen in Linux untersuchen, die für die Kontrolle des Zugriffs auf Dateien und Verzeichnisse von entscheidender Bedeutung sind. Das Verständnis der Dateiberechtigungen ist unerlässlich, um die Sicherheit und Integrität Ihrer Daten zu gewährleisten.

Jede Datei und jedes Verzeichnis in Linux hat zugeordnete Berechtigungen, die bestimmen, wer die Datei lesen, schreiben oder ausführen kann. Diese Berechtigungen sind in drei Klassen unterteilt:

  • Eigentümer: 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.

Jede Klasse hat drei Arten von Berechtigungen:

  • Lesen (r): Erlaubt dem Benutzer, den Inhalt der Datei anzuzeigen oder den Inhalt des Verzeichnisses aufzulisten.
  • Schreiben (w): Erlaubt dem Benutzer, den Inhalt der Datei zu ändern oder Dateien im Verzeichnis zu erstellen, zu löschen oder umzubenennen.
  • Ausführen (x): Erlaubt dem Benutzer, die Datei als Programm auszuführen oder in das Verzeichnis zu wechseln.

Beginnen wir damit, eine Datei zu erstellen und ihre Berechtigungen zu untersuchen. Öffnen Sie den VS Code-Editor und erstellen Sie eine neue Datei namens my_script.py im Verzeichnis ~/project. Fügen Sie der Datei den folgenden Inhalt hinzu:

print("Hello, world!")

Speichern Sie die Datei. Öffnen Sie jetzt das Terminal und navigieren Sie zum Verzeichnis ~/project:

cd ~/project

Listen Sie die Dateien im Verzeichnis mit detaillierten Informationen auf, indem Sie den Befehl ls -l verwenden:

ls -l

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

-rw-r--r-- 1 labex labex 22 Oct 26 10:00 my_script.py

Lassen Sie uns die Ausgabe analysieren:

  • Die ersten 10 Zeichen stellen die Dateiberechtigungen dar.
  • Das erste Zeichen gibt den Dateityp an: - für eine normale Datei, d für ein Verzeichnis, l für einen symbolischen Link usw.
  • Die nächsten drei Zeichen (rw-) stellen die Berechtigungen des Eigentümers dar: Lesen und Schreiben.
  • Die nächsten drei Zeichen (r--) stellen die Berechtigungen der Gruppe dar: Nur Lesen.
  • Die letzten drei Zeichen (r--) stellen die Berechtigungen für andere dar: Nur Lesen.
  • 1 gibt die Anzahl der harten Links zur Datei an.
  • labex labex gibt den Eigentümer und die Gruppe der Datei an.
  • 22 ist die Dateigröße in Bytes.
  • Oct 26 10:00 ist die Zeit der letzten Änderung.
  • my_script.py ist der Dateiname.

Derzeit hat die Datei my_script.py Lesen- und Schreibberechtigungen für den Eigentümer (Sie) und Nur-Leseberechtigungen für die Gruppe und andere. Das bedeutet, dass Sie die Datei lesen und ändern können, andere Benutzer können sie jedoch nur lesen.

Um das Python-Skript auszuführen, benötigen Sie Ausführungsberechtigungen. Versuchen wir, das Skript auszuführen:

python my_script.py

Sie sollten die folgende Ausgabe sehen:

Hello, world!

Obwohl die Datei keine Ausführungsberechtigungen hat, können Sie sie dennoch mit dem python-Interpreter ausführen. Der Befehl python selbst hat Ausführungsberechtigungen und kann den Inhalt der Datei my_script.py lesen und ausführen.

In den nächsten Schritten werden wir untersuchen, wie Sie mit Python Dateiberechtigungen prüfen und wie Sie sie mit Linux-Befehlen ändern können.

Verwendung von os.access() mit os.R_OK

In diesem Schritt verwenden wir die os.access()-Funktion in Python, um zu prüfen, ob eine Datei Leseberechtigungen hat. Die os.access()-Funktion nimmt zwei Argumente entgegen: den Dateipfad und ein Berechtigungsflag. Wir verwenden os.R_OK, um auf Leseberechtigungen zu prüfen.

Zunächst erstellen wir eine neue Python-Datei namens check_permissions.py im Verzeichnis ~/project. Öffnen Sie den VS Code-Editor und fügen Sie der Datei den folgenden Code hinzu:

import os

file_path = "my_script.py"

## Check if the file exists
if not os.path.exists(file_path):
    print(f"Error: The file '{file_path}' does not exist.")
else:
    ## Check if the file has read permissions
    if os.access(file_path, os.R_OK):
        print(f"The file '{file_path}' has read permissions.")
    else:
        print(f"The file '{file_path}' does not have read permissions.")

Speichern Sie die Datei. Dieses Skript prüft zunächst, ob die Datei my_script.py existiert. Wenn dies der Fall ist, verwendet es os.access() mit os.R_OK, um zu prüfen, ob die Datei Leseberechtigungen hat. Das Skript gibt eine Nachricht aus, die angibt, ob die Datei Leseberechtigungen hat oder nicht.

Führen Sie nun das Skript aus dem Terminal aus:

python check_permissions.py

Sie sollten die folgende Ausgabe sehen:

The file 'my_script.py' has read permissions.

Das liegt daran, dass die Datei my_script.py standardmäßig für den Eigentümer, die Gruppe und andere Leseberechtigungen hat.

Ändern wir nun die Berechtigungen der Datei my_script.py, um die Leseberechtigungen für alle außer dem Eigentümer zu entfernen. Wir können dies mit dem chmod-Befehl im Terminal tun.

chmod 600 my_script.py

Dieser Befehl setzt die Berechtigungen von my_script.py auf Lesen und Schreiben nur für den Eigentümer (600 in Oktalnotation).

Führen Sie nun das Skript check_permissions.py erneut aus:

python check_permissions.py

Sie sollten nun die folgende Ausgabe sehen:

The file 'my_script.py' does not have read permissions.

Das liegt daran, dass wir die Leseberechtigungen für die Gruppe und andere entfernt haben. Die os.access()-Funktion erkennt korrekt, dass die Datei für den Benutzer, der das Skript ausführt (hier labex), keine Leseberechtigungen mehr hat.

Schließlich stellen wir die ursprünglichen Berechtigungen der Datei my_script.py wieder her:

chmod 644 my_script.py

Dieser Befehl setzt die Berechtigungen von my_script.py auf Lesen und Schreiben für den Eigentümer und Nur-Lesen für die Gruppe und andere (644 in Oktalnotation).

Versuch, die Datei zum Lesen zu öffnen

In diesem Schritt werden wir versuchen, die Datei my_script.py in Python zum Lesen zu öffnen und potenzielle PermissionError-Ausnahmen zu behandeln. Dies zeigt, wie man Situationen elegant bewältigen kann, in denen das Skript nicht die erforderlichen Berechtigungen hat, um auf eine Datei zuzugreifen.

Zunächst ändern wir die Berechtigungen der Datei my_script.py, um die Leseberechtigungen für alle außer dem Eigentümer zu entfernen, wie wir es im vorherigen Schritt getan haben:

chmod 600 my_script.py

Nun erstellen wir eine neue Python-Datei namens open_file.py im Verzeichnis ~/project. Öffnen Sie den VS Code-Editor und fügen Sie der Datei den folgenden Code hinzu:

file_path = "my_script.py"

try:
    with open(file_path, "r") as file:
        content = file.read()
        print("File content:")
        print(content)
except PermissionError:
    print(f"Error: You do not have permission to read the file '{file_path}'.")
except FileNotFoundError:
    print(f"Error: The file '{file_path}' was not found.")
except Exception as e:
    print(f"An unexpected error occurred: {e}")

Speichern Sie die Datei. Dieses Skript versucht, die Datei my_script.py im Lesemodus ("r") zu öffnen. Es verwendet einen try...except-Block, um potenzielle Fehler zu behandeln. Wenn ein PermissionError auftritt (das heißt, das Skript hat keine Leseberechtigungen), wird eine Fehlermeldung ausgegeben. Es behandelt auch FileNotFoundError, falls die Datei nicht existiert, und eine generische Exception, um alle anderen potenziellen Fehler abzufangen.

Führen Sie nun das Skript aus dem Terminal aus:

python open_file.py

Sie sollten die folgende Ausgabe sehen:

Error: You do not have permission to read the file 'my_script.py'.

Das liegt daran, dass wir die Leseberechtigungen für die Gruppe und andere entfernt haben und das Skript als Benutzer labex ausgeführt wird, der keine Leseberechtigungen für die Datei mehr hat.

Stellen wir nun die ursprünglichen Berechtigungen der Datei my_script.py wieder her:

chmod 644 my_script.py

Führen Sie das Skript open_file.py erneut aus:

python open_file.py

Sie sollten nun den Inhalt der Datei my_script.py in der Konsole sehen:

File content:
print("Hello, world!")

Dies zeigt, wie man Dateiberechtigungen in Python behandelt und wie man Situationen elegant bewältigen kann, in denen das Skript nicht die erforderlichen Berechtigungen hat, um auf eine Datei zuzugreifen. Durch die Verwendung von try...except-Blöcken können Sie verhindern, dass Ihr Skript abstürzt und dem Benutzer informative Fehlermeldungen geben.

Zusammenfassung

In diesem Lab haben wir die Dateiberechtigungen in Linux untersucht, wobei wir uns auf die Art und Weise konzentriert haben, wie sie den Zugriff auf Dateien und Verzeichnisse steuern. Wir haben gelernt, dass Berechtigungen in drei Klassen unterteilt sind: Eigentümer, Gruppe und andere, wobei jede Klasse Lesen-, Schreib- und Ausführungsberechtigungen hat.

Wir haben eine Python-Datei erstellt und den Befehl ls -l verwendet, um ihre Berechtigungen zu untersuchen. Dadurch haben wir verstanden, wie die Ausgabe den Dateityp und die für jede Benutzerklasse gewährten Berechtigungen darstellt. Dieses grundlegende Wissen ist entscheidend, um zu verstehen, wie man in den folgenden Schritten die Lesbarkeit von Dateien prüft.