本帖最后由 jackz007 于 2020-3-23 00:05 编辑
因为在递归调用的时候,在函数入口,通过def search_file(path,tp):
os.chdir(path)
无条件地把当前路径改变到次级子目录中了,而在函数退出的时候,却没有相应返回父目录的操作,因此,在递归调用前后,当前目录会发生改变。而这种改变会直接影响到后续子目录、文件的识别及子目录递归,导致函数无法正常运行。所以,在递归调用之后,必须通过下面的语句 search_file(file_each,tp)
os.chdir(os.pardir)
把当前目录修改为父目录,其实,这是在恢复递归调用前的环境和状态,消除因函数递归调用而带来的有害改变,所以,这个操作是非常必要的!
楼主可以试试修改的代码:import os
def search_file(path , tp):
cd = os . getcwd()
os . chdir(path)
try:
for file_each in os . listdir() :
if os . path . isdir(file_each) :
search_file(file_each , tp)
elif os . path . isfile(file_each) :
if os . path . splitext(file_each)[1] . lower() == tp . lower() :
print(os . path . realpath(file_each))
except:
pass
os . chdir(cd)
path = input("请输入查找的初始目录:") . strip()
if path :
if os . path . exists(path) and os . path . isdir(path) :
tp = input("请输入查找的文件类型【扩展名】:") . strip()
if tp :
if tp[1] != '.' : tp = '.' + tp
search_file(path , tp)
|