如何使用尾部递归在python中遍历目录树?

如何使用尾部递归在python中遍历目录树?,python,recursion,tail-recursion,Python,Recursion,Tail Recursion,我正在做一个项目,它只是一个超级基本的命令行文件浏览器。问题是我得到了超过最大递归深度的错误。我想把它转换成至少是一个有点尾部递归的东西。代码如下: import os, subprocess, itertools def open_file(file, cwd): ''.join(file) if os.path.isdir(cwd + '/' + file) and '.app' not in file: os.chdir(cwd + '/' + file)

我正在做一个项目,它只是一个超级基本的命令行文件浏览器。问题是我得到了超过最大递归深度的
错误。我想把它转换成至少是一个有点尾部递归的东西。代码如下:

import os, subprocess, itertools

def open_file(file, cwd):
    ''.join(file)
    if os.path.isdir(cwd + '/' + file) and '.app' not in file:
        os.chdir(cwd + '/' + file)
        print os.getcwd()
        filter_dir()
    elif '.app' in file:
        subprocess.call(['open', cwd + '/' + file])
    else:
        subprocess.call(['open', cwd + '/' + file])
        return

def input_checks(input, cwd):
    if input != '' and input != '../' and input[0] != '!' and input[0] != '.' and '<' not in input:
       out = itertools.ifilter(lambda x: input in x and '.' not in x, os.listdir(cwd))
    elif input == '../':
        print '../'
        cwd = os.chdir('../')
        filter_dir()
    elif input and input[0] == '!':
       out = itertools.ifilter(lambda x: input[1:] not in x, os.listdir(cwd))
    elif input and input[0] == '.':
       out = itertools.ifilter(lambda x: input[1:] in x, os.listdir(cwd))
    else:
       out = itertools.ifilter(lambda x: '.' not in x, os.listdir(cwd))
    return out

def filter_dir(input=''):
    cwd = os.getcwd()
    files = []
    out = input_checks(input, cwd)
    files = [i for i in out]
    for i in files:
        print i + '\t',
    for i in files:
        if i.lower() == input.lower():
            print i
            open_file(input, cwd)
            return
    if len(files) < 2:
        open_file(''.join(files), cwd)
        return
    print
    if '!' in input or '.' in input or '<' in input :
        input = ''
    print input,
    input = input + raw_input()
    print
    filter_dir(input)
导入操作系统、子流程、itertools
def open_文件(文件,cwd):
''.join(文件)
如果os.path.isdir(cwd+'/'+文件)和'.app'不在文件中:
chdir(cwd+'/'+文件)
打印os.getcwd()
筛选器_dir()
文件中的elif“.app”:
subprocess.call(['open',cwd+'/'+文件])
其他:
subprocess.call(['open',cwd+'/'+文件])
返回
def输入检查(输入,cwd):

如果输入!=''和输入!='../'并输入[0]!='!'并输入[0]!='。'“考虑一下前面的StackOverflow问题,它直接解决了您似乎要完成的任务。。。也就是说:“在Python中遍历目录树。”:虽然您可以使其尾部递归-我还没有读过您的代码,所以我不知道-使其尾部递归不会解决您的问题。Python不做尾部调用消除,不完全是这样。我知道os.walk,并选择在本例中不使用它。我希望这是非常快的,所以我只列出当前目录的内容,然后使用os.chwd移动。您可以尝试,最终(Python 3.5)替换
walk()
(速度快了好几倍)。