web-dev-qa-db-fra.com

Parcourir les fichiers et sous-dossiers dans Python

Je voudrais parcourir le dossier actuel et tous ses sous-dossiers et obtenir tous les fichiers avec les extensions .htm | .html. J'ai découvert qu'il est possible de savoir si un objet est un répertoire ou un fichier comme celui-ci:

import os

dirList = os.listdir("./") # current directory
for dir in dirList:
  if os.path.isdir(dir) == True:
    # I don't know how to get into this dir and do the same thing here
  else:
    # I got file and i can regexp if it is .htm|html

et à la fin, je voudrais avoir tous les fichiers et leurs chemins dans un tableau. Est-ce que quelque chose comme ça est possible?

37
Blackie123

Vous pouvez utiliser os.walk() pour effectuer une itération récursive dans un répertoire et tous ses sous-répertoires:

for root, dirs, files in os.walk(path):
    for name in files:
        if name.endswith((".html", ".htm")):
            # whatever

Pour construire une liste de ces noms, vous pouvez utiliser une compréhension de liste:

htmlfiles = [os.path.join(root, name)
             for root, dirs, files in os.walk(path)
             for name in files
             if name.endswith((".html", ".htm"))]
98
Sven Marnach

J'avais un travail similaire sur lequel travailler, et c'est comme ça que je l'ai fait.

import os

rootdir = os.getcwd()

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        #print os.path.join(subdir, file)
        filepath = subdir + os.sep + file

        if filepath.endswith(".html"):
            print (filepath)

J'espère que cela t'aides.

4
Pragyaditya Das

Utilisez newDirName = os.path.abspath(dir) pour créer un chemin de répertoire complet pour le sous-répertoire, puis répertoriez son contenu comme vous l'avez fait avec le parent (c'est-à-dire newDirList = os.listDir(newDirName)).

Vous pouvez créer une méthode distincte de votre extrait de code et l'appeler de manière récursive par le biais de la structure de sous-répertoires. Le premier paramètre est le chemin du répertoire. Cela changera pour chaque sous-répertoire.

Cette réponse est basée sur la documentation de la version 3.1.1 de la bibliothèque Python. Vous trouverez un bon exemple de modèle à la page 228 de la référence de la bibliothèque Python 3.1.1 (Chapitre 10 - Accès aux fichiers et aux répertoires). Bonne chance!

3
NeonJack

Version légèrement modifiée de la solution de Sven Marnach ..


import os

folder_location = 'C:\SomeFolderName' file_list = create_file_list(folder_location)

def create_file_list(path): return_list = []

for filenames in os.walk(path): for file_list in filenames: for file_name in file_list: if file_name.endswith((".txt")): return_list.append(file_name) return return_list

0
campervancoder

En python 3, vous pouvez utiliser os.scandir ():

for i in os.scandir(path):
    if i.is_file():
        print('File: ' + i.path)
    Elif i.is_dir():
        print('Folder: ' i.path)
0
Spas