题目
编写一个程序: 1、能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件; 2、并打印出相对路径。
思路
1. 这道题目是要用到递归的,递归中return的陷阱,请参考上篇博文 《python递归中的return"陷阱" 》
2. 涉及到正则的部分考虑用re.serach方法
3. 可以先匹配到目录或文件,返回文件名/目录名,后续再优化
4. 优化:过滤目录的匹配,打印相对路径,如果不设置匹配字符串,则返回当前目录下的所有文件
初步方案一:
这个方案有个很大的问题是return func(new_dir)只会递归第一个目录excel操作下的所有目录,当excel目录递归到最底层,dir_list变成 ['my_excel.py', 'testdata.xlsx']后,if 和 elif 条件都不满足,此时的func(new_dir)层层返回给最外层func()的结果是None,有了返回值,意味着这个函数的结束,那么for item in dir_list:后面没有得到执行
运行结果:
初步方案二:
鉴于这一点,必须摒弃方案一中的return,即使在上一篇文章《python递归中的return"陷阱" 》中看到,global和return(func(i))的方法都奏效,但注意这道题是有for循环的,所以采用global的方法
运行结果正常:
[' demo.py ' , ' demo4.py ' , ' demo_2.py ' , ' demo_3.py ' , ' excel操作 ' , ' future_loan ' , ' hello.txt ' , ' poem.txt ' , ' python_API_framework ' , ' try_except.py ' , ' 函数.py ' , ' 列表.py ' , ' 基本语法和常用运算符.py ' , ' 字典.py ' , ' 字符串.py ' , ' 文件操作.py ' , ' 日志 ' , ' 私有属性和方法.py ' , ' 类和对象(一).py ' , ' 类和对象(二).py ' , ' 类和对象作业(二).py ' , ' 练习(一)login.py ' , ' 练习(二)查找文件.py ' , ' 装饰器.py ' ]
[ ' my_excel.py ' , ' testdata.xlsx ' ]
[ ' driver ' , ' run_all_test.py ' , ' test_related ' , ' __init__.py ' ]
[ ' __init__.py ' ]
[ ' test_case ' , ' test_data ' , ' test_report ' , ' __init__.py ' ]
[ ' login_case.py ' , ' model ' , ' page_object ' , ' __init__.py ' ]
[ ' driver.py ' , ' function.py ' , ' myunit.py ' , ' __init__.py ' ]
[ ' base.py ' , ' home_page.py ' , ' login_page.py ' , ' __init__.py ' ]
[ ' __init__.py ' ]
[ ' image ' , ' __init__.py ' ]
[ ' __init__.py ' ]
[ ' Common ' , ' HTMLTestReport ' , ' Logs ' , ' main.py ' , ' TestCases ' , ' TestDatas ' , ' __init__.py ' , ' __pycache__ ' ]
[ ' xiaozhai_API_testReport2018-06-24_19-22-03.html ' , ' xiaozhai_API_testReport2018-06-24_19-41-26.html ' , ' __init__.py ' ]
[ ' Autotest_log_2018-06-24 1922.log ' , ' Autotest_log_2018-06-24 1926.log ' , ' Autotest_log_2018-06-24 1929.log ' , ' Autotest_log_2018-06-24 1941.log ' , ' __init__.py ' ]
[ ' test_api.py ' , ' __init__.py ' , ' __pycache__ ' ]
[ ' test_api.cpython-34.pyc ' ]
[ ' api_info.xlsx ' , ' __init__.py ' ]
[ ' __init__.cpython-34.pyc ' ]
[ ' autotest.log ' , ' demo.py ' , ' 日志_1.py ' ]
Common
优化后的代码
运行结果
['.\\999python999s.py', '.\\test\\2python3.py', '.\\test\\__python__.txt', '.\\test2\\6python.py', '.\\test2\\test3\\test.python.yml']
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?