我正在编写一个程序,该程序需要探索给定路径topdown的所有可能的子目录。
我的问题是我需要在调用递归之前和完成递归之后做一些事情,os.walk()
不允许这样做。更准确地说,我需要在目录子树中进行递归:
(注意:这不是真正的Python代码,只是类似Python的代码来解释我需要做什么)
def recursion(path):
action1()
for subdir in path:
recursion(path+subdir)
action2()
我可以用os.walk()
做的很简单:
def recursion(path):
action1()
action2()
for subdir in path:
recursion(path+subdir)
有什么解决办法吗?
答案 0 :(得分:1)
您可以改用os.scandir
:
def recursion(path):
action1()
for entry in os.scandir(path):
if entry.is_dir():
recursion(os.path.join(path, entry.name))
action2()
,或者如果您使用的是Python 3.4或更早版本,请改用较慢的os.listdir
:
def recursion(path):
action1()
for name in os.listdir(path):
full_path = os.path.join(path, name)
if os.path.isdir(full_path):
recursion(full_path)
action2()
答案 1 :(得分:1)
或者您可以使用glob
和split()
import glob
path='this/is/your/path'
pathElementList=path.split('/')
for x in range(len(pathElementList)):
directoryToDoActionIn='/'.join(pathElementList[0:x])
filesindir=glob.glob(directoryToDoActionIn+'/')
#do action with files here