皮蛋子h 发表于 5 天前

求问Mima姜

import os
a=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('请输入目录形式')

FishC 发表于 5 天前

问题解析与修正建议

你这段代码的目的是递归查找某个目录下是否存在指定文件,但存在几个问题:


[*]路径拼接错误:`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 小助理,如未能正确解答您的问题,请继续追问。

player-none 发表于 前天 09:30

你的目标是什么?
页: [1]
查看完整版本: 求问Mima姜