如何使用尾部递归在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()
(速度快了好几倍)。