Wie kann ich die Ausgabe der Funktion os.walk() von Python anpassen, um eine verschachtelte Verzeichnisliste zu erstellen?

Susan Sarandon
Freigeben: 2024-11-08 15:57:02
Original
909 Leute haben es durchsucht

How Can I Customize the Output of Python's os.walk() Function to Create a Nested Directory Listing?

OS.walk() zum rekursiven Durchlaufen von Verzeichnissen in Python verwenden: Eine detaillierte Anleitung

Einführung

Die Funktion os.walk() von Python bietet einen leistungsstarken Mechanismus zum rekursiven Durchlaufen von Verzeichnisbäumen. Es durchläuft alle Verzeichnisse und Dateien innerhalb eines bestimmten Verzeichnisses und ist damit ein unverzichtbares Werkzeug für Aufgaben wie Dateiverwaltung und Verzeichnisdurchsuchung.

Problem: Anpassen der Verzeichnislistenausgabe

Um die Fähigkeiten von os.walk() zu demonstrieren, stellen Sie sich das folgende Szenario vor: Sie möchten rekursiv vom Stammverzeichnis aus navigieren und eine benutzerdefinierte Liste von Verzeichnissen und Dateien, einschließlich verschachtelter Ebenen, drucken.

Anfänglich Code und O/P

Mit dem folgenden Code:

import os
import fnmatch

for root, dir, files in os.walk("."):
    print(root)
    print("")
    for items in fnmatch.filter(files, "*"):
        print("..." + items)
    print("")
Nach dem Login kopieren

Sie erhalten die folgende Ausgabe:

.

...Python_Notes
...pypy.py
...pypy.py.save
...classdemo.py
....goutputstream-J9ZUXW
...latest.py
...pack.py
...classdemo.pyc
...Python_Notes~
...module-demo.py
...filetype.py

./packagedemo

...classdemo.py
...__init__.pyc
...__init__.py
...classdemo.pyc
Nach dem Login kopieren

Diese Ausgabe erfüllt jedoch nicht die Anforderungen das gewünschte Format von:

A
---a.txt
---b.txt
---B
------c.out
Nach dem Login kopieren
Nach dem Login kopieren

Lösung

Um die Ausgabe anzupassen, ist ein verbesserter Ansatz erforderlich. Der folgende Code erreicht das gewünschte Format:

import os

# traverse root directory, and list directories as dirs and files as files
for root, dirs, files in os.walk("."):
    path = root.split(os.sep)
    print((len(path) - 1) * '---', os.path.basename(root))
    for file in files:
        print(len(path) * '---', file)
Nach dem Login kopieren

Erklärung

Dieser Code verwendet die folgende Logik:

  1. Er teilt die Wurzel Pfad in einen Listenpfad unter Verwendung des Verzeichnistrennzeichens des Betriebssystems (z. B. „/“ unter UNIX).
  2. Es gibt den Basisnamen des aktuellen Verzeichnisses mit der entsprechenden Anzahl führender Bindestriche aus, die seine Verschachtelungsebene darstellen.
  3. Es durchläuft die Dateien im aktuellen Verzeichnis und druckt jede Datei mit ihrer Verschachtelungsebene.

Ausgabe

Mit diesem verbesserten Code können Sie erhält die gewünschte Ausgabe:

A
---a.txt
---b.txt
---B
------c.out
Nach dem Login kopieren
Nach dem Login kopieren

In dieser Ausgabe stellen A und B Verzeichnisse dar, während a.txt, b.txt und c.out Dateien darstellen. Die Anzahl der Bindestrich-Präfixe gibt die Verschachtelungsebene jedes Elements an.

Das obige ist der detaillierte Inhalt vonWie kann ich die Ausgabe der Funktion os.walk() von Python anpassen, um eine verschachtelte Verzeichnisliste zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage