Os.walk()替代品

时间:2019-02-05 22:41:48

标签: python os.walk subdirectory

我正在编写一个程序,该程序需要探索给定路径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)

有什么解决办法吗?

2 个答案:

答案 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)

或者您可以使用globsplit()

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