Dans le développement quotidien, nous devons souvent vérifier s'il y a des fichiers ou des dossiers que nous voulons dans un "répertoire ou dossier". L'article suivant vous présente principalement l'utilisation de la récursivité et de la traversée walk() dans Python Information. liés aux fichiers du répertoire .
Méthode 1 : Appel récursif :
[html] view plain copy #!/usr/bin/python #coding:utf8 import os def dirlist(path, allfile): filelist = os.listdir(path) for filename in filelist: filepath = os.path.join(path, filename) if os.path.isdir(filepath): dirlist(filepath, allfile) else: allfile.append(filepath) return allfile print dirlist("/home/yuan/testdir", [])
Méthode 2 :
os.walk()
Cette fonction en porte un <🎜 Objet >Générateur pour parcourir toute l'arborescence des répertoires. top spécifie le niveau supérieur du répertoire, tandis que topdown est une valeur booléenne utilisée pour indiquer si le répertoire est parcouru de haut en bas (la valeur par défaut) ou de bas en haut. Le générateur renvoyé produira un tuple (dirpath, dirnames, filenames), où dirpath est une
chaîne contenant le chemin d'accès au répertoire, dirnames est une liste de tous les sous-répertoires dans dirpath et filename est une liste de fichiers. dans dirpath, à l'exclusion des répertoires. L'argument oneerror est une fonction qui accepte un seul argument. Si une erreur se produit pendant le traitement, cette fonction sera appelée à l'aide de l'option os.error. Le comportement par défaut consiste à ignorer les erreurs. Si le répertoire est parcouru de haut en bas, la modification des noms de répertoire affectera le processus de parcours.
[python] view plain copy #!/user/bin/python #!conding=utf8 import os g = os.walk("/home/yuan/testdir") for path,d,filelist in g: print d; for filename in filelist: print os.path.join(path, filename)
pensée récursive et l'autre est la fonction walk() de <. 🎜>module os comme suit Sans plus tarder, jetons un œil à l'introduction détaillée :
Liste la structure des répertoires
1. Méthode récursive
Utiliser l'idée de récursion pour lister le contenu de tous les dossiers, déterminer s'il s'agit d'un répertoire et continuer à appeler sa propre méthode.#coding:utf-8 import os allfile=[] def getallfile(path): allfilelist=os.listdir(path) for file in allfilelist: filepath=os.path.join(path,file) #判断是不是文件夹 if os.path.isdir(filepath): getallfile(filepath) allfile.append(filepath) return allfile if name == 'main': path="C:\Users\zs\PycharmProjects\demo" allfiles=getallfile(path) for item in allfiles: print item #结果 C:\Users\zs\PycharmProjects\demo\.idea\demo.iml C:\Users\zs\PycharmProjects\demo\.idea\encodings.xml C:\Users\zs\PycharmProjects\demo\.idea\misc.xml C:\Users\zs\PycharmProjects\demo\.idea\modules.xml C:\Users\zs\PycharmProjects\demo\.idea\workspace.xml C:\Users\zs\PycharmProjects\demo\.idea C:\Users\zs\PycharmProjects\demo\functiondemo.py C:\Users\zs\PycharmProjects\demo\index.py C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES\django.po C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\en_US C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.mo C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.po C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\zh_CN C:\Users\zs\PycharmProjects\demo\locale C:\Users\zs\PycharmProjects\demo\name.txt C:\Users\zs\PycharmProjects\demo\text.txt
La fonction walk() du module second.os
os.walk(top, topdown=True, onerror=None, followlinks=False)
renvoie un 3 element L'ancêtre de (dirpath,
Paramètre 2 : topdown – facultatif, Vrai ou non spécifié, le 3-tuple d'un répertoire sera généré avant le 3-tuple de l'un de ses sous-dossiers (répertoire de haut en bas). Si topdown est False, le 3-tuple d'un répertoire sera généré après le 3-tuple de l'un de ses sous-répertoires (répertoires de bas en haut).
Paramètre trois : onerror - facultatif, est une fonction ; elle a un paramètre lorsqu'elle est appelée, une instance OSError. Après avoir signalé cette erreur, continuez la marche ou lancez une
exceptionpour terminer la marche. Paramètre 4 : followlinks – Si défini sur true, le répertoire sera accessible via des liens symboliques.
#coding:utf-8 import os def getallfiles(path): allfile=[] for dirpath,dirnames,filenames in os.walk(path): for dir in dirnames: allfile.append(os.path.join(dirpath,dir)) for name in filenames: allfile.append(os.path.join(dirpath, name)) return allfile if name == 'main': path = "C:\Users\zs\PycharmProjects\demo" allfile=getallfiles(path) for file in allfile: print file #输出结果 C:\Users\zs\PycharmProjects\demo\.idea C:\Users\zs\PycharmProjects\demo\locale C:\Users\zs\PycharmProjects\demo\functiondemo.py C:\Users\zs\PycharmProjects\demo\index.py C:\Users\zs\PycharmProjects\demo\name.txt C:\Users\zs\PycharmProjects\demo\text.txt C:\Users\zs\PycharmProjects\demo\.idea\demo.iml C:\Users\zs\PycharmProjects\demo\.idea\encodings.xml C:\Users\zs\PycharmProjects\demo\.idea\misc.xml C:\Users\zs\PycharmProjects\demo\.idea\modules.xml C:\Users\zs\PycharmProjects\demo\.idea\workspace.xml C:\Users\zs\PycharmProjects\demo\locale\en_US C:\Users\zs\PycharmProjects\demo\locale\zh_CN C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\en_US\LC_MESSAGES\django.po C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.mo C:\Users\zs\PycharmProjects\demo\locale\zh_CN\LC_MESSAGES\lang.po
Les résultats d'entrée des deux méthodes sont les mêmes. Mais il y a une différence dans l’ordre de saisie. En comparaison, j'estime que la méthode walk() du module os de python est relativement simple
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!