Home > Article > Backend Development > Introduction to the method of recursively traversing directories and files in Python
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:
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)
dirnames, filenames),
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 simpleThe 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!