Maison  >  Article  >  développement back-end  >  Introduction à la méthode de parcours récursif de répertoires et de fichiers en python

Introduction à la méthode de parcours récursif de répertoires et de fichiers en python

零下一度
零下一度original
2017-07-16 12:00:312206parcourir

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 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)
Nous devons souvent vérifier s'il y a des fichiers ou des dossiers que nous voulons dans un "répertoire ou dossier". Cela nous oblige à parcourir tous les fichiers et sous-dossiers en boucle, c'est le cas en Python. nécessaire pour parcourir tous les fichiers du répertoire spécifié. Il existe deux méthodes pour les fichiers et les dossiers, y compris les répertoires à plusieurs niveaux. L'une consiste à parcourir la

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 == &#39;main&#39;:

  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,

dirname

s, filenames),

    dirpath : Le chemin pour lister le répertoire spécifié
  • dirnames : tous les dossiers du répertoire
  • filenames : tous les fichiers du répertoire
  • Paramètre 1 : top – root Pour pour chaque dossier du répertoire (y compris lui-même), un 3-tuple (chemin d'accès, noms de répertoires, noms de fichiers) [chemin du dossier, nom du dossier, nom du fichier] est généré.

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

exception

pour 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 == &#39;main&#39;:
 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
Résumé

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!

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