该代码的目标是,每当用户输入一行字符串作为输入时,程序都应打印所考虑的每个文件,目录,子目录的所有路径(这意味着输入字符串包含在文件或目录中)。目录名称或包含在文件路径中)
此代码的问题是,每当我运行整个程序时,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()
预期输出应该是外壳中打印的路径列表。
答案 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.walk
:answer