python查找子目录文件名问题

jiyiliuniany 2017-12-04 07:27:21
原题为:编写一个search(s)的函数,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出完整路径。

以下为我的代码
import os
def search(s):
for x in os.listdir('.'):
if os.path.isfile(x) and (os.path.splitext(x)[0].find(s) != -1):
print(x)
elif os.path.isdir(x):
newpath = os.path.join('/home/jiiyiliunian/Desktop', str(x))
os.chdir(newpath)
search(s)
else:
print("error")

search("test")


运行结果如下:


如果注释掉elif和else部分的代码,运行正常


初学python的小白实在找不到问题了。。请教前辈们,代码哪里出错了?谢谢
...全文
182 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
extend 2017-12-05
  • 打赏
  • 举报
回复
import os
def search(s,path):
    print(os.listdir(path))
    for x in os.listdir(path):
        #print(x)
        if os.path.isfile(x) and (os.path.splitext(x)[0].find(s) != -1):
            print(x)
        
        elif os.path.isdir(x):
            newpath = os.path.join(path, str(x))
            print(newpath)
            #os.chdir(newpath)
            search(s,newpath)
        else:
            print("error")
            #return
        
search("test",".")
改了一下,可用,你试试。 不用os.chdir(newpath)这种改变当前目录的方式。 递归,你要用传目录的方式。
extend 2017-12-05
  • 打赏
  • 举报
回复
有逻辑漏洞,如果一个文件即不满足if,又不满足elif,那就执行print("error"),然后,就没有然后了,函数就退出了。

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧