Comment puis-je personnaliser la sortie de la fonction os.walk() de Python pour créer une liste de répertoires imbriqués ?

Susan Sarandon
Libérer: 2024-11-08 15:57:02
original
910 Les gens l'ont consulté

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

Utilisation de os.walk() pour parcourir récursivement des répertoires en Python : un guide détaillé

Introduction

La fonction os.walk() de Python fournit un mécanisme puissant pour parcourir de manière récursive les arborescences de répertoires. Il parcourt tous les répertoires et fichiers d'un répertoire spécifié, ce qui en fait un outil essentiel pour des tâches telles que la gestion de fichiers et l'exploration de répertoires.

Problème : personnalisation de la sortie de la liste des répertoires

Pour démontrer les capacités de os.walk(), considérons le scénario suivant : vous souhaitez naviguer de manière récursive à partir du répertoire racine et imprimer une liste personnalisée de répertoires et de fichiers, y compris les répertoires imbriqués. niveaux.

Code initial et O/P

En utilisant le code suivant :

import os
import fnmatch

for root, dir, files in os.walk("."):
    print(root)
    print("")
    for items in fnmatch.filter(files, "*"):
        print("..." + items)
    print("")
Copier après la connexion

Vous obtenez le résultat suivant :

.

...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
Copier après la connexion

Cependant, cette sortie ne répond pas au format souhaité de :

A
---a.txt
---b.txt
---B
------c.out
Copier après la connexion
Copier après la connexion

Solution

Pour personnaliser la sortie, une approche améliorée est nécessaire. Le code suivant obtient le format souhaité :

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)
Copier après la connexion

Explication

Ce code utilise la logique suivante :

  1. Il divise la racine chemin dans un chemin de liste en utilisant le séparateur de répertoire du système d'exploitation (par exemple, « / » sur UNIX).
  2. Il imprime le nom de base du répertoire courant avec le nombre approprié de traits d'union, représentant son niveau d'imbrication.
  3. Il parcourt les fichiers du répertoire courant et imprime chaque fichier avec son niveau d'imbrication.

Sortie

Utilisation de cette amélioration code, vous obtiendrez le résultat souhaité :

A
---a.txt
---b.txt
---B
------c.out
Copier après la connexion
Copier après la connexion

Dans cette sortie, A et B représentent des répertoires, tandis que a.txt, b.txt et c.out représentent des fichiers. Le nombre de préfixes tirets indique le niveau d'imbrication de chaque élément.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal