|
|
发表于 2019-2-20 19:15:28
|
显示全部楼层
本帖最后由 jackz007 于 2019-2-21 11:30 编辑
是的,楼主的见解是有道理的,这个程序虽然可以运行,但是,从严格的意义上讲,代码是有缺陷的,在函数 search_file(start_dir, target) 的入口,用一条 os . chdir(start_dir) 无条件改变了当前目录,完成任务后,自己不恢复,却要靠调用者用一条 os . chdir(os . pardir) 来进行恢复,这的确是该程序代码设计不合理的地方。
于是,针对此问题,对代码做了一点小修改:
- import os
- def search_file(start_dir, target) :
- origDir = os . curdir # 记录当前初始目录
- os . chdir(start_dir) # chdir 到搜索目录
- for each_file in os . listdir(os . curdir) :
- if each_file . upper() == target . upper() : # Windows 文件名字符串比较,忽略字符大小写
- print(os . getcwd() + os . sep + each_file) # 使用os.sep是程序更标准
- if os. path . isdir(each_file) :
- search_file(each_file , target) # 递归调用
- os . chdir(origDir) # 恢复初始目录
- start_dir = input('请输入待查找的初始目录:')
- target = input('请输入需要查找的目标文件:')
- search_file(start_dir , target)
复制代码
这样,函数中的对当前路径的修改就有了恢复,前后形成呼应,逻辑上更加完美。 |
|