Dateiberechtigungen in Python ändern

Olorunfemi Akinlua 21 Juni 2023
  1. Betriebssystemdateiberechtigungen in Python
  2. Verwenden Sie chmod(), um Dateiberechtigungen in Python zu ändern
Dateiberechtigungen in Python ändern

Bei der Arbeit mit Dateien innerhalb von Python oder rund um eine Python-Anwendung kann es unerlässlich sein, über die richtigen Dateiberechtigungen zu verfügen, um die beabsichtigten Vorgänge auszuführen. Von funktionierenden Skriptdateien bis hin zu Datenexporten können die von den Python-Anwendungen erstellten, aktualisierten oder verwalteten Dateien auch mit dem Python-Code bearbeitet werden.

In der Regel verwenden die meisten Entwickler mit Dateiberechtigungen Befehlszeilenbefehle oder Skripts. Es ist jedoch möglich, Dateiberechtigungen in Python mithilfe bestimmter integrierter Bibliotheken und ihrer Methoden zu ändern.

In diesem Artikel wird erläutert, wie Sie Dateiberechtigungen in Python ändern.

Betriebssystemdateiberechtigungen in Python

Innerhalb der Betriebssysteme, von Windows bis Linux, sind ihnen unterschiedliche Berechtigungen eigen. Die Berechtigungen zum Lesen, Schreiben und Ausführen werden je nach Verwendungszweck auf Dateien festgelegt.

Der Datei-Explorer stellt häufig Benutzeroberflächen bereit, die es typischen Benutzern ermöglichen, die einer Datei gewährten Dateiberechtigungen zu ändern. Für die meisten Entwickler geschieht dies jedoch über die Befehlszeilenschnittstelle.

Für Linux (im Allgemeinen Unix-Systeme) und sogar Windows können Sie neben anderen Informationen, die eine Datei enthält, die Dateiberechtigungen überprüfen.

Unter Windows:

ls

Ausgang:

Directory: C:\Users\USER

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         7/13/2022   8:09 PM                .android
d-----         9/23/2022   8:11 PM                .vscode
d-r---          5/9/2022   1:34 PM                3D Objects
d-----         5/12/2022  11:49 PM                Apple
d-----         8/30/2022   1:20 PM                Autodesk
d-r---         3/18/2022   6:34 AM                Contacts
d-r---         9/23/2022   8:19 PM                Desktop
d-r---         9/23/2022   8:52 PM                Documents
d-r---         9/28/2022  12:48 PM                Downloads
d-r---         3/18/2022   6:34 AM                Favorites
d-r---         4/28/2022  11:03 AM                Links
d-r---         7/16/2022  10:41 PM                Music
d-r---         4/11/2022  11:39 PM                OneDrive
d-r---         9/22/2022  11:13 AM                Pictures
d-r---         3/18/2022   6:34 AM                Saved Games
d-r---         3/18/2022   6:35 AM                Searches
d-r---         9/26/2022   2:49 PM                Videos
-a----         9/23/2022   8:25 PM              5 .node_repl_history
-a----         9/27/2022   2:34 AM           1100 pslog.txt

Die Registerkarte Modus enthält die Dateiberechtigung-Informationen, die die erste Spalte ist, die den Dateityp anzeigt.

In ähnlicher Weise können Sie für Unix-Systeme wie Linux alle Dateiinformationen auflisten.

ls -la

Ausgang:

drwxr-xr-x   6 eva        users         1024 Jun  8 16:46 sabon
-rw-------   1 eva        users         1564 Apr 28 14:35 splus
-rw-------   1 eva        users         1119 Apr 28 16:00 splus2
-rw-r--r--   1 eva        users         9753 Sep 27 11:14 ssh_known_hosts
-rw-r--r--   1 eva        users         4131 Sep 21 15:23 swlist.out
-rw-r--r--   1 eva        users        94031 Sep  1 16:07 tarnti.zip

Außerdem enthält die erste Spalte den Modus (drwxr-xr-x). In der ersten Spalte gibt es vier Aufschlüsselungen.

Die erste Aufschlüsselung ist das erste Zeichen, das den tatsächlichen Dateityp darstellt. Die zweite Aufschlüsselung (die nächsten drei Zeichen) zeigt die Zugriffsrechte (oder Berechtigungen) des Benutzers.

Die dritte Aufschlüsselung (die nächsten drei Zeichen) zeigt die Berechtigungen der Gruppe, der die Datei gehört. Und die letzte Aufschlüsselung (die letzten drei Zeichen) zeigt die Berechtigungen anderer Benutzer.

Lassen Sie uns nun diesen drwxr-xr-x-Modus verwenden, um es zu erklären. Bevor wir fortfahren, müssen Sie wissen, was die drei Buchstaben bedeuten:

  1. r bedeutet gelesen.
  2. w bedeutet schreiben.
  3. x bedeutet Ausführen.

Jeder Datei oder jedem Verzeichnis werden Zugriffsrechte für den Dateieigentümer, die Mitglieder einer Gruppe verwandter Benutzer und andere zugewiesen. Rechte können gesetzt werden auf:

  1. Lesen Sie eine Datei.
  2. Schreiben Sie eine Datei.
  3. Führen Sie eine Datei aus.

Das erste Zeichen d zeigt an, dass es sich um ein Verzeichnis handelt. Wenn das Zeichen jedoch - ist, handelt es sich um eine typische Datei.

Die nächsten drei Zeichensätze rwx bedeuten, dass die Benutzer das Verzeichnis lesen, schreiben und ausführen können. Die nächsten drei, r-x, bedeuten, dass die Gruppe das Verzeichnis lesen und ausführen, aber nicht schreiben kann.

Die letzten drei, r-x, bedeuten, dass andere das Verzeichnis lesen und ausführen, aber nicht schreiben können.

Um also die Berechtigung einer Datei unter Linux zu ändern, ist ein einfacher chmod-Befehl oft nützlich.

chmod u+x someFile

Das u+x ist die Erlaubnis, die someFile gegeben wird.

Die Berechtigung u+x fügt dem Benutzer (Remember, Benutzer, Gruppe und andere Benutzer) von someFile Ausführungsrechte hinzu (+). Denken Sie daran, dass die Ausführung durch x dargestellt wird.

Aber wir können dies innerhalb von Python ganz einfach erreichen. Mit diesem Wissen können Sie jetzt problemlos die Berechtigungen von Dateien in Python ändern.

Verwenden Sie chmod(), um Dateiberechtigungen in Python zu ändern

Die Methode chmod() stammt aus dem Befehl chmod von Linux, dessen Aufgabe es ist, den Modus einer Datei oder eines Verzeichnisses zu ändern. Die Methode chmod() ist über das Modul os verfügbar, das bei jeder Python-Installation oder -Umgebung standardmäßig vorhanden ist.

Das os-Modul stellt Schnittstellen und Methoden bereit, die es uns ermöglichen, mit jedem Betriebssystem zu interagieren. Es bietet Betriebssystemroutinen für NT oder Posix, abhängig von seinem System.

Unter vielen Funktionen ermöglicht es uns, Verzeichnisse zu verwalten, ihren Inhalt abzurufen und das Verhalten und die Modi innerhalb solcher Verzeichnisse zu ändern.

Neben der chmod()-Methode brauchen wir ein weiteres Modul namens stat, das Konstanten/Funktionen bereitstellt, um die Ergebnisse von os.stat() und os.lstat() zu interpretieren. Diese Statistik stellt die Berechtigungs-Flags bereit, die wir benötigen, um die Dateiberechtigungen für den Benutzer, die Gruppe oder andere Benutzer zu ändern.

Die Berechtigungsflags, die übereinander fallen, umfassen Lese-, Schreib- und Ausführungsvorgänge.

Wir müssen ihre Module importieren, um chmod() und stat zu verwenden.

import os
import stat

Außerdem müssen wir auf die Datei zugreifen, deren Berechtigungen wir ändern möchten. Auch dafür ist das Modul os nützlich.

Das chmod() arbeitet mit folgender Syntax:

os.chmod(filePath, permissionFlag)

Um den aktuellen Berechtigungsmodus einer Datei (z. B. einer neu erstellten index.txt) zu überprüfen, können Sie die Methode stat() verwenden.

perm = os.stat("index.txt")
print(perm.st_mode)

Ausgang:

33206

Die Eigenschaft os.stat() erhält den Status eines angegebenen Pfads, und die Eigenschaft st_mode stellt die Berechtigungsbits der Datei bereit, wobei die ersten beiden Oktalziffern den Dateityp und die anderen vier die Dateiberechtigungen angeben.

Die Datei muss sich im selben Verzeichnis wie die Python-Datei befinden oder den vollständigen Dateipfad angeben.

Unter Verwendung der oktalen Notation (eine von zwei Möglichkeiten, Berechtigungen anzugeben) für Linux-Benutzer können wir uns die Berechtigungseinstellungen als eine Reihe von Bits vorstellen, die im folgenden Code-Snippet beschrieben sind.

rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
rwx --- --- = 111 000 000

# rwx = 111 in binary = 7
# rw- = 110 in binary = 6
# r-x = 101 in binary = 5
# r-- = 100 in binary = 4

Um den Berechtigungsmodus zu ändern, können Sie dann die Berechtigungsflags stat verwenden:

import os
import stat

perm = os.stat("index.txt")
print(perm.st_mode)
os.chmod("index.txt", stat.S_IWGRP)

perm = os.stat("index.txt")
print(perm.st_mode)

Ausgang:

33206
33060

Die erste Oktalzahl zeigt den Berechtigungsstatus vor der Änderung, und die zweite Oktalzahl ist diejenige nach dem Hinzufügen der Leseberechtigungen nach Gruppen.

Mit dem | können Sie verschiedene Berechtigungs-Flags kombinieren Operator. In diesem Beispiel fügen wir die Berechtigungen für den Benutzer zum Lesen, Schreiben und Ausführen hinzu.

import os
import stat

perm = os.stat("index.txt")
print(perm.st_mode)
os.chmod("index.txt", stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC | stat.S_IRUSR)

perm = os.stat("index.txt")
print(perm.st_mode)

Ausgang:

33060
33206

Es gibt andere Berechtigungs-Flags, die unten zu sehen sind:

  1. stat.S_IREAD-, stat.S_IWRITE- und stat.S_IEXEC-Flags zum Hinzufügen von Lese-, Schreib- bzw. Ausführungsrechten für einen Benutzer zu einer Datei.
  2. Flags stat.S_IRGRP, stat.S_IWGRP und stat.S_IXGRP zum Hinzufügen von Lese-, Schreib- und Ausführungsrechten für eine Gruppe zu einer Datei.
  3. Flags stat.S_IROTH, stat.S_IWOTH und stat.S_IXOTH zum Hinzufügen von Lese-, Schreib- und Ausführungsrechten für andere Benutzer zu einer Datei.
  4. Flags stat.S_IRWXU, stat.S_IRWXG und stat.S_IRWXO zum gleichzeitigen Hinzufügen von Lese-, Schreib- und Ausführungsrechten für den Benutzer, die Gruppe bzw. andere Benutzer.

Neben der Verwendung der Berechtigungs-Flags können Sie die Oktalnotation innerhalb der chmod()-Methode verwenden. Verwenden wir die Oktalzahl 755, die angibt, dass der Benutzer lesen, schreiben und ausführen kann und die Gruppe und andere Benutzer nur lesen und ausführen können.

os.chmod("index.txt", 0o755)

Ausgang:

33206

Sie müssen das Präfix 0o hinzufügen, um anzuzeigen, dass es sich um eine oktale Notation handelt.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Verwandter Artikel - Python File