Python最大递归深度超过

时间:2019-07-11 01:47:56

标签: python

该代码的目标是,每当用户输入一行字符串作为输入时,程序都应打印所考虑的每个文件,目录,子目录的所有路径(这意味着输入字符串包含在文件或目录中)。目录名称或包含在文件路径中)

此代码的问题是,每当我运行整个程序时,check_name函数中的“ alist.extend(check_name(name,str(f))))”将运行太多次,超过默认的递归限制,并且更改默认号码将无济于事。

我尝试将默认递归限制增加到2000、3000、4000,但仍然无法正常工作。当我增加到100000时,它崩溃了。

def aopen(a:str,b:str) -> list:
    path = Path(b)
    alist =[]
    for p in path.iterdir():
        if p.is_file():
            alist.append(p)
        elif p.is_dir():
            alist.append(p)
            alist.extend(aopen(a,p))
    return alist

def check(name:str,path:str) -> list:
    alist=[]
    path0 = Path(path).cwd()
    for f in path0.iterdir():
        if name in str(f):
            if f.is_file():
                alist.append(f)
            elif f.is_dir():
                alist.extend(aopen(name,str(f)))
        elif name not in str(f) and f.is_dir():
            alist.extend(check(name,str(f)))
    return alist

def p():
    alist = []
    while True:
        link = input()
        if link == 'done-for-now':
            break
        alist = check(link,'..')
        if alist == []:
            print("NOT FOUND")
            continue
        else:
            for i in alist:
                print(i)

p()

预期输出应该是外壳中打印的路径列表。

1 个答案:

答案 0 :(得分:0)

这可以通过python中的os模块来完成。具体来说,os.walk。 它返回给定目录中文件的所有路径。 检查功能如下所示。

import os

def check_dir(name, d):
    # get all the file paths
    paths = [[x[0] + z for z in x[2]] for x in os.walk(d)]

    # check if name is in the path
    good_paths = []
    for i in paths:
        if name in i:
            good_paths.append(i)

    return good_paths

对于os.walkanswer

,这是一个很好的答案