Home  >  Article  >  Backend Development  >  Introduction to the method of recursively traversing directories and files in Python

Introduction to the method of recursively traversing directories and files in Python

零下一度
零下一度Original
2017-07-16 12:00:312272browse

In daily development, we often need to check whether there are files or folders we want inside a "directory or folder". The following article mainly introduces you to the use of recursion and walk() in PythonTraversal Related information of directory files.

Method 1: Recursive call:

[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", [])


Method 2:

os.walk()

This function wears a pieceGenerator object to traverse the entire directory tree.
top specifies the top level of the directory, while topdown is a Boolean value used to indicate whether to traverse the directory from top to bottom (default value) or bottom to top. The returned generator will produce a tuple (dirpath, dirnames, filenames), where dirpath is a string containing the path to the directory, dirnames is a list of all subdirectories in dirpath, and filename is A list of files in dirpath, excluding directories. The oneerror argument is a function that accepts a single argument.
If any errors occur during processing, this function will be called using the os.error option. The default behavior is to ignore errors. If the directory is traversed from top to bottom, modifying dirnames will affect the traversal process.

[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)

We often need to check whether there are files or folders we want inside a "directory or folder". We need to loop and iterate out all the files and subfolders. In Python, we traverse all the files in the specified directory. and folders, including multi-level directories, there are two methods, one is to traverse through recursive thinking, the other is the walk() function of os module Not much to say below Say, let’s take a look at the detailed introduction:

ListDirectory structure

1. Recursive method

 #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

Use the recursive idea to list the contents of all folders and determine if it is The directory continues to call its own methods.

2. The walk() function of the os module

##os.walk(top, topdown=True, onerror=None, followlinks=False)

Returns a 3-element ancestor, (dirpath,

dirnames, filenames),

  • dirpath: To list the path of the specified directory

  • dirnames: All folders under the directory

  • filenames: Under the directory All files

Parameter 1: top – each folder in the root directory (including itself), generating 3-tuple (dirpath, dirnames, filenames) [folder path , folder name, file name].

Parameter 2: topdown – optional, True or not specified, the 3-tuple of a directory will be generated before the 3-tuple of any of its subfolders (directory from top to bottom ). If topdown is False, a directory's 3-tuple will be generated after the 3-tuple of any of its subdirectories (directories from bottom to top).

Parameter three: onerror – optional, is a function; it has one parameter when called, an OSError instance. After reporting this error, continue the walk, or throw

exception to terminate the walk.

Parameter 4: followlinks – If set to true, the directory will be accessed through soft links.


#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

Summary

The input results of the two methods are the same. But there is a difference in the order of input. In comparison, I feel that the walk() method of python's os module is relatively simple

The above is the detailed content of Introduction to the method of recursively traversing directories and files in Python. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn