鱼C论坛

 找回密码
 立即注册
查看: 171|回复: 2

求问Mima姜

[复制链接]
发表于 2025-4-1 23:14:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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('请输入目录形式')
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-1 23:56:53 | 显示全部楼层
问题解析与修正建议

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

  • 路径拼接错误:`os.listdir(n)` 返回的是文件名,不包含完整路径,导致 `os.path.isfile(each_dir)` 判断的是当前工作目录下的文件。
  • 递归路径错误:你没有正确拼接子目录的完整路径。
  • 变量命名混乱:`eachdir=each_dir` 这句没有意义。
  • 查找到目标文件后没有终止递归:虽然你用了 `break`,但只会跳出当前循环,递归仍会继续。


修正后的代码如下:

  1. import os

  2. a = input('请输入待查找的初始目录:')
  3. b = input('请输入需要查找的目标文件:')

  4. def find_files(n):
  5.     for each in os.listdir(n):
  6.         full_path = os.path.join(n, each)
  7.         if os.path.isfile(full_path) and os.path.basename(full_path) == b:
  8.             print('找到文件:' + full_path)
  9.             return True
  10.         elif os.path.isdir(full_path):
  11.             if find_files(full_path):
  12.                 return True
  13.     return False

  14. if os.path.isdir(a):
  15.     if not find_files(a):
  16.         print('未找到目标文件')
  17. else:
  18.     print('请输入目录形式')
复制代码


说明:

  • 使用 os.path.join 拼接完整路径。
  • 使用 return True 来终止递归。
  • 增加了未找到文件时的提示。


如果你还有其他问题,欢迎继续提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-4 09:30:41 | 显示全部楼层
你的目标是什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-25 22:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表