Parcourir les fichiers et les sous-dossiers en Python

j'aimerais parcourir le répertoire courant et tous ses sous-dossiers et tous les fichiers .htm/.extensions html. J'ai découvert qu'il est possible de savoir si un objet est un dir ou fichier comme ceci:

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 d'accès dans un tableau. Est quelque chose comme ça possible?

35
demandé sur alain.janinm 2011-04-28 14:31:15

5 réponses

Vous pouvez utiliser os.walk() récursive de parcourir 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 générer 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"))]
93
répondu Sven Marnach 2018-06-01 17:06:26

Utiliser newDirName = os.path.abspath(dir) pour créer un nom de chemin de répertoire complet pour le sous-répertoire et ensuite lister son contenu comme vous l'avez fait avec le parent (i.e. newDirList = os.listDir(newDirName))

vous pouvez créer une méthode séparée de votre code snippet et l'appeler récursivement à travers la structure de sous-répertoires. Le premier paramètre est le nom 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. Il est un bon modèle exemple de ceci en action à la page 228 de la bibliothèque de référence Python 3.1.1 (Chapitre 10-accès aux fichiers et aux répertoires). Bonne Chance!

3
répondu NeonJack 2017-02-17 00:08:24

j'avais une chose similaire à 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)

Espérons que cette aide.

2
répondu Pragyaditya Das 2018-07-11 05:23:50

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
répondu campervancoder 2014-01-05 21:14:46

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
répondu Spas 2018-09-12 15:12:30