练习1中编写的代码只能查询根目录下指定文件名的文件
来源:2-8 查找指定的文件
坻屿
2021-08-18 11:19:12
#test1
#想找的文件名已知,但目录不知道
import glob #glob模块中包含了os模块及os模块的所有功能
path=glob.os.path.join(glob.os.getcwd(),'*')
def search(path,target):
result= glob.glob(path) #获取当前目录下的所有内容
print(result)
final_result=[]
for data in result:
print(data)
if glob.os.path.isdir(data):
_path=glob.os.path.join(data,'*') #是路径则调用递归继续查找路径下的文件
search(_path,target)
else:
if target in data:
print(final_result)
final_result.append(data)
print(final_result)
print('found')
else:
print('not found')
return final_result
result=search(path,target='test1.txt')
result2=search(path,target='test3.txt')
print(result)
print(result2)
根目录及其目录下的所有内容如上图
代码查验的最终结果如上图
通过执行代码查验过程会发现每一次进行递归的时候final_result列表都会被清空,按理来说这会导致最后返回的final_result总是空列表。
但如果目标文件在根目录下时(如test1.txt)却可以返回查询到的结果,目标文件在根目录下的文件夹中(如test3.txt)就会像设想的那样返回空列表。
问题有点复杂,想问一下出现这种情况的原因和解决的方法。
1回答
同学,你好!
这种情况的是因为:在查到了test3文件夹时递归调用了search( )函数将test3.txt文件添加到了final_result列表,因为是在test2文件夹被遍历时发现的test3文件夹调用了search( )函数,所以对test3文件夹遍历结束后回到test2调用的search( )函数时final_result被清空,所以test3.txt所在的位置被清空了,如下图:
解决办法:可以把final_result作为全局变量,如下图:
根据不同需求,可以更灵活写代码,祝学习愉快~
相似问题