本帖最后由 jackz007 于 2022-7-29 09:48 编辑
改变和恢复当前路径的条件不对等,导致代码逻辑存在严重缺陷import os
def find(a,b):
os.chdir(a) # 这里无条件改变了当前路径
for c in os.listdir(a):
if c == b:
print (os.getcwd() + os.sep + c)
if os.path.isdir(c):
find(c,b)
os.chdir(os.pardir) # 恢复当前路径也必须是无条件的!
a = input('请输入待查找的初始目录:')
b = input('请输入待查找的文件:')
find(a,b)
应该这么改import os
def find(a,b):
r = os . getcwd() # 改变当前路径之前,应该先获取当前路径
os . chdir(a) # 改变当前路径是无条件的
for c in os . listdir(a):
if os . path . isfile(c): # 需要查找的应该是文件,而不是子目录
if c . lower() == b . lower(): # Windows 文件名忽略英文大小写字母
print (os.getcwd() + os.sep + c)
elif os . path . isdir(c):
find(c , b)
os . chdir(r) # 【关键】:恢复当前路径也必须是无条件的,重点在代码的缩进位置
a = input('请输入待查找的初始目录:')
b = input('请输入待查找的文件:')
find(a,b)
下面是我编写的代码,重点在全程使用绝对路径,不使用 os . chdir() 改变当前目录,供楼主参考:import os
def find(a , b):
try: # 防止搜索无权限目录出错
for c in os . listdir(a):
d = os . path . join(a , c)
if os . path . isfile(d):
if c . lower() == b . lower():
print(d)
elif os . path . isdir(d):
find(d , b)
except Exception as e: # 如果搜索无权限目录异常会被这条语句捕获
print(e)
a = input('请输入待查找的初始目录:') . strip()
if a:
b = input('请输入待查找的文件:') . strip()
if b:
find(a , b)
|