Seite 1 von 1

Zugriffsrechte von Verzeichnissen und Dateien ermitteln

Verfasst: Donnerstag 20. August 2020, 10:38
von jve
Hallo Zusammen,
Ich bin dabei ein Programm zu schreiben, welches die Anzahl und Namen von Verzeichnissen und Dateien ermittelt und ausgibt.
Das funktioniert auch alles :D Nun möchte ich jedoch die zugriffsrechte der Dateien und Verzeichnisse ermitteln. Dabei bin ich auf eine Hürde gestoßen im fogenden beispiel werden die Zugriffsrechte einer Datei geprüft wie kann ich aber meherer Dateien in einer liste auf einmal prüfen bzw. hintereinander

Code: Alles auswählen

import os
os.access('my_file', os.R_OK) # Check for read access
True
os.access('my_file', os.W_OK) # Check for write access
True
os.access('my_file', os.X_OK) # Check for execution access
False
os.access('my_file', os.F_OK) # Check for existance of file
True
ich habe so einen Ansatz klappt aber auch nicht:

Code: Alles auswählen

def access(path):
    list_d, list_f = name_dir_file(path)
    for i in range(len(list_f)):
        l_rechte = [os.access(list_f[i].split("\\")[-1], os.R_OK,)]
        return l_rechte
    """if os.access(list, os.W_OK):
        print("Schreibrechte bestehen.")
    else:
        print("Schreibrechte bestehen nicht.")"""

Re: Zugriffsrechte von Verzeichnissen und Dateien ermitteln

Verfasst: Donnerstag 20. August 2020, 10:46
von Jankie
Das return gehört nicht auf Ebene des Schleifenkörpers. Es gehört auf Ebene des Schlaifenkopfes, da return eine Schleife verlässt.
Der list* Präfix kann weg und du solltest keine Abhürzungen benutzen, also directories und files statt list_d und list_f.
Man iteriert in Python nicht mit Hilfe des Index über eine Liste, das ist ein Anti-Pattern. Man iteriert direkt über die Elemente der Liste.

Code: Alles auswählen

BUCHSTABEN = ["A","B","C","D","E"]

#also statt so:
for i in range(len(BUCHSTABEN)):
    print(BUCHSTABEN[i])

#besser so:
for buchstabe in BUCHSTABEN:
    print(buchstabe)

#edit: Tippfehler und Beispiel eingefügt.

Re: Zugriffsrechte von Verzeichnissen und Dateien ermitteln

Verfasst: Donnerstag 20. August 2020, 10:50
von Sirius3
Was macht denn die Funktion name_dir_file? In neuen Programmen sollte man nicht mehr die low-level-Funktionen aus os benutzen, sondern pathlib.Path. Leider gibt es keinen direkten Ersatz für os.access.
Variablennamen sollten aussagekräftig sein, und keine Typen im Namen enthalten. Statt list_f wäre filenames besser, am Plural erkennt man schon, dass es mehrere Dateinamen sind, also irgendetwas Listartiges.
In Python iteriert man nicht über einen Index, wenn man direkt über die Elemente der Liste iterieren kann. Wenn Du die Rechte aller Dateien ermitteln willst, dann mußt Du sie in einer Liste sammeln, statt also eine Liste mit einem Element zu erzeugen, mußt Du ein Element anhängen. Das return muß dann auch nach der Schleife stehen. Dateinamen bearbeitet man nicht mit Stringfunktionen, und os.access braucht auch den gesamten Pfad und nicht nur den Dateiname.

Code: Alles auswählen

def access(path):
    directories, filenames = list_all_directories_and_filenames(path)
    read_rights = []
    for filename in filenames:
        read_rights.append(os.access(filename, os.R_OK))
    read_rights