求问Mima姜
import osa=input('请输入待查找的初始目录:')
b=input('请输入需要查找的目标文件:')
def find_files(n):
for each_dir in os.listdir(n):
if os.path.isfile(each_dir) and os.path.basename(each_dir)==b:
print(str(each_dir))
break
elif os.path.isdir(each_dir):
eachdir=each_dir
find_files(eachdir)
if os.path.isdir(a):
find_files(a)
else:
print('请输入目录形式') 问题解析与修正建议
你这段代码的目的是递归查找某个目录下是否存在指定文件,但存在几个问题:
[*]路径拼接错误:`os.listdir(n)` 返回的是文件名,不包含完整路径,导致 `os.path.isfile(each_dir)` 判断的是当前工作目录下的文件。
[*]递归路径错误:你没有正确拼接子目录的完整路径。
[*]变量命名混乱:`eachdir=each_dir` 这句没有意义。
[*]查找到目标文件后没有终止递归:虽然你用了 `break`,但只会跳出当前循环,递归仍会继续。
修正后的代码如下:
import os
a = input('请输入待查找的初始目录:')
b = input('请输入需要查找的目标文件:')
def find_files(n):
for each in os.listdir(n):
full_path = os.path.join(n, each)
if os.path.isfile(full_path) and os.path.basename(full_path) == b:
print('找到文件:' + full_path)
return True
elif os.path.isdir(full_path):
if find_files(full_path):
return True
return False
if os.path.isdir(a):
if not find_files(a):
print('未找到目标文件')
else:
print('请输入目录形式')
说明:
[*]使用 os.path.join 拼接完整路径。
[*]使用 return True 来终止递归。
[*]增加了未找到文件时的提示。
如果你还有其他问题,欢迎继续提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 你的目标是什么?
页:
[1]