Maison >développement back-end >Tutoriel Python >Comment lire de manière récursive le contenu d'un dossier au-delà d'un niveau de sous-répertoire en Python ?

Comment lire de manière récursive le contenu d'un dossier au-delà d'un niveau de sous-répertoire en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-18 14:42:03862parcourir

How to Recursively Read Folder Contents Beyond One Subdirectory Level in Python?

Lecture récursive du dossier Python

Cette question se pose lorsque vous travaillez avec un script Python pour lire de manière récursive le contenu des fichiers texte dans une structure de dossiers. Cependant, le code initial fourni rencontrait une limitation de lecture d'un seul dossier en profondeur.

Identification du problème

Le problème réside dans le chemin codé en dur : outfileName = rootdir "/" dossier "/py-outfile.txt". Ce chemin suppose que le fichier cible se trouve un sous-dossier en dessous du répertoire racine.

Solution

Pour résoudre cette limitation, nous devons comprendre les valeurs de retour d'os. walk :

  • root : le chemin actuel en cours de traitement.
  • subdirs : une liste de sous-répertoires dans root.
  • files : une liste de fichiers hors répertoire dans root.

Au lieu d'utiliser filePath = rootdir '/' file, nous devrions utiliser os.path.join pour combiner racine et fichier : filePath = os.path.join(root, file). Cette approche nous permet de naviguer correctement dans la hiérarchie des dossiers.

Code révisé

Voici une version révisée du code :

import os
import sys

walk_dir = sys.argv[1]

print('walk_dir = ' + walk_dir)

# Convert to absolute path (recommended if the working directory may change during execution)
walk_dir = os.path.abspath(walk_dir)
print('walk_dir (absolute) = ' + os.path.abspath(walk_dir))

for root, subdirs, files in os.walk(walk_dir):
    print('--\nroot = ' + root)
    list_file_path = os.path.join(root, 'my-directory-list.txt')
    print('list_file_path = ' + list_file_path)

    with open(list_file_path, 'wb') as list_file:
        for subdir in subdirs:
            print('\t- subdirectory ' + subdir)

        for filename in files:
            file_path = os.path.join(root, filename)
            print('\t- file %s (full path: %s)' % (filename, file_path))

            with open(file_path, 'rb') as f:
                f_content = f.read()
                list_file.write(('The file %s contains:\n' % filename).encode('utf-8'))
                list_file.write(f_content)
                list_file.write(b'\n')

Ceci le code révisé parcourra désormais de manière récursive toute la structure des dossiers et écrira le contenu de chaque fichier dans le list_file_path spécifié.

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!

Déclaration:
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