第30讲第三题的问题
import osimport os.path
def search(path,name):
os.chdir(path)
filelist=os.listdir()
for each in filelist:
if name in filelist:
print(path+'\\'+name)
elif os.path.isdir(each)==1:
path+='\\'+each
search(path,name)
os.chdir('..')
path=input('请输入路径:')
name=input('请输入文件名:')
search(path,name)
感觉我的代码和小甲鱼的差不多,为什么我的运行不了?
import os
import os.path
result_set = set() # 集合是用来去除重复的
def search(path,name):
os.chdir(path)
filelist=os.listdir()
for each in filelist:
if name in filelist:
result_set.add(path + '\\' + name)# 你这里 for 循环的话,每次检查一个文件的时候,就会检查一次 name 是否在文件夹里,就会多次输出这个文件的地址,所以用 集合 去重
elif os.path.isdir(each)==1:
path = os.getcwd() + '\\' +each # 这里的 path 一直会发生改变,你可以尝试打印你源码中的 path 看看,如果有多个子路径叠加,递归并不会 返回上一层,因为返回上一次的在递归后面
# 即使你在递归之前返回上一层,会影响第一次主文件夹路径的运行,所以此处使用 os.getcwd() 来获取当前工作路径,因为这个表示的是你当前的位置
# 直接使用这个就能避免你源码中 path 叠加的问题
search(path,name)
os.chdir('..')
path=input('请输入路径:')
name=input('请输入文件名:')
search(path,name)
for each in result_set:
print(each)
页:
[1]