Schwankende Anzahl von Dateien und Verzeichnissen

Schwankende Anzahl von Dateien und Verzeichnissen

Situation: Ich habe ein Python-Skript, das rekursiv und separat die Gesamtzahl der Dateien und Verzeichnisse zählt. Unten ist der Code:

def traverse(top):
    filecount = 0
    dircount = 0
    for root, dirs, files in os.walk(top):
        for f in files:
            if dirs: dircount += 1
            elif files: filecount += 1
            else:
                print("Error")
                break
    print("Num of dir: " + dircount)
    print("Num of files: " + filecount)

Problem: Fast jedes Mal, wenn ich den Code ausführe, erhalte ich eine andere Anzahl an Verzeichnissen und Dateien.

Frage: Können Sie einen Grund dafür nennen, warum die Anzahl der Dateien und Verzeichnisse schwankt? Liegt es vielleicht an der Funktionsweise von Linux?

Zusätzliche Informationen: Ich möchte nur sicherstellen, dass dieser Teil meines Skripts für das gesamte Programm sehr wichtig ist

Antwort1

Ein laufendes Unix-System erstellt während des normalen Betriebs hin und wieder temporäre Dateien und Verzeichnisse.

Das bloße Öffnen einer Datei in einem Editor oder das Senden einer E-Mail erstellt wahrscheinlich eine oder zwei temporäre Dateien, und das Surfen im Internet kann innerhalb kurzer Zeit Hunderte von Dateien erstellen und löschen. Außerdem kann eine grafische Desktopumgebung Caching und andere Dinge ausführen, die Sie normalerweise nicht bemerken, wodurch temporäre Dateien erstellt und gelöscht werden.

Abhängig davon, welches Ihr oberstes Verzeichnis ist, decken Sie möglicherweise auch Verzeichnisse ab, die häufig geändert werden, wie beispielsweise /tmpund alle Verzeichnisse darunter /varsowie Ihr Home-Verzeichnis.

Antwort2

„dirs“ ist eine Liste von Verzeichnisnamen im aktuellen (Stamm-)Verzeichnis und „files“ ist eine Liste von Dateinamen im aktuellen Verzeichnis.

Ich glaube, Sie möchten eher so etwas:

def traverse(top):
    filecount = 0
    dircount = 0
    for root, dirs, files in os.walk(top):
        dircount += len(dirs)
        filecount += len(files)
    print("Num of dir: " + dircount)
    print("Num of files: " + filecount)

verwandte Informationen