Lister - Programmidee

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Dokumentation zum Modul „sha“ hat geschrieben: Deprecated since version 2.5: Use the hashlib module instead.
Einfach „sha“ durch „hashlib.sha1“ ersetzen, das funktioniert dann auch mit Python 3. Außerdem importierst du das Modul „filecmp“, obwohl du es nicht verwendest.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Aber allgemein ist der Code besser als vorher? (Warum gibt es kein Wein-Smiley?) Ich werde mir das Modul mal ansehen ;)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Gary123456 hat geschrieben:
cofi hat geschrieben:
Gary123456 hat geschrieben:Es könnte dann aber sein, dass dieses getsize nicht genügen Berechtigungen hat.
Das ist doch genauso raten ...
Ist nicht raten. Wenn die die .py nicht zugreifen kann, kommt ne exception, dass es keine Berechtigungen hat.
Natürlich ist es Raten, wenn man nicht die möglichen Fehler in der Dokumentation nachschaut:
http://docs.python.org/2.7/library/os.path.html#os.path.getsize hat geschrieben:os.path.getsize(path)
Return the size, in bytes, of path. Raise os.error if the file does not exist or is inaccessible.
Das Leben ist wie ein Tennisball.
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Ich finde den Code schon besser. Würde die Definition von „verzeichnisse“ wohl direkt unter „main“ schreiben, außerdem stimmt die Dateigröße, die du angibst, nicht. „os.path.getsize“ liefert die Größe in Bytes, und 1024 Bytes sind 1 KiB. (1024 KiB sind übrigens 1 MiB. →Wikipedia)
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Ich denke, dass ich weitgehenst fertig bin:

Code: Alles auswählen

import os, sha

def shasum(filepath, blocksize = 1024 * 1024):
    h = sha.new()
    with open(filepath, "rb") as f:
        while True:
            part = f.read(blocksize)
            if not part:
                break
            h.update(part)
    return h.hexdigest()

def main():
    #Verzeichnisse = Unter diesen Verzeichnisse sollen Dateien gelistet werden
    with open("Testdatei.txt", "w") as textdatei:
        verzeichnisse = ["C:\\", "C:\\Users"]    
        for verzeichnis in verzeichnisse:
            for datei in os.listdir(verzeichnis):
                pfad = os.path.join(verzeichnis, datei)
                try:
                    if os.path.isfile(pfad):
                        textdatei.write("FI {} Größe: {} MB SHA: {} \n".format(pfad, (os.path.getsize(pfad)/1024)/1024.0, shasum(pfad)))
                    elif os.path.isdir(pfad):
                        textdatei.write("OR {} \n".format(pfad))
                except IOError:
                    continue
if __name__ == "__main__":
    main()
Würde die Definition von „verzeichnisse“ wohl direkt unter „main“ schreiben,

Du meinst also als Kommentar die Definition?
Antworten