646134029 发表于 2021-6-4 19:58:52

脑袋 想爆了 救救孩子

def seek():
    while True:
      #判断目录是否正确
      a = input(r'请输入待查找的目录:')
      if os.path.exists(a):
            os.chdir(a)
            target = input(r'请输入需要查找的目标文件:')
            GGG(target,a)
            break

                  
      else:
            print('目录不存在!')
            continue


def GGG(target,a):
    os.chdir(a)
    list = os.listdir()
    for each in list:
      if (each != target) and (os.path.isdir(each)):
             #进入下一层文件
            a = os.path.join(a , each)
            print(a)
            GGG(target, a)
      elif each == target:
            print(os.getcwd() + target)
    else:
      print('文件夹遍历完成:', os.getcwd())
      os.chdir(os.pardir)

import os
seek()


RT。2. 编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索,可以搜索到该目录下所有同名的文件
一直由BUG修不好 求帮助~~

646134029 发表于 2021-6-4 20:00:37

3个小时了, 依旧不知道问题在哪~~~

Twilight6 发表于 2021-6-4 20:20:37



你的错误原因是因为你只更改了工作目录,但是你没有更改 a 的路径值,从而导致没有返回上一层目录

Twilight6 发表于 2021-6-4 20:25:56



帮你稍微改了下代码,参考下吧:

import os

def seek():
    while True:
      # 判断目录是否正确
      a = input(r'请输入待查找的目录:')
      if os.path.exists(a):
            target = input(r'请输入需要查找的目标文件:')
            GGG(target, a)
            break
      print('目录不存在!')


def GGG(target, a):
    list = os.listdir(a)
    for each in list:
      if os.path.isdir(each):
            a = os.path.join(a, each)
            GGG(target, a)
            a = os.getcwd()
      elif each == target:
            print(os.getcwd() + '\\' + target)

seek()

删去了多余的部分代码,实际上功能上仅和你代码差别在于从递归函数出来重新给 a 进行赋值,即:a = os.getcwd()

另外这里建议,导入模块都放在代码块的开头。而且你这里使用 a 来作为路径,那么就不必用 os.chird 函数了

646134029 发表于 2021-6-4 20:52:13

Twilight6 发表于 2021-6-4 20:25
帮你稍微改了下代码,参考下吧:




感谢,我仔细看看

646134029 发表于 2021-6-4 21:16:00

Twilight6 发表于 2021-6-4 20:25
帮你稍微改了下代码,参考下吧:




我实验了一下,代码还是不正确,没有输出值

Twilight6 发表于 2021-6-4 21:25:36

646134029 发表于 2021-6-4 21:16
我实验了一下,代码还是不正确,没有输出值


确实,刚刚没验证代码,a 用了os.getcwd() ,导致获取路径错误

抱歉,现在重新改了下,也测试过了

参考代码:

import os

def seek():
    while True:
      a = input(r'请输入待查找的目录:')
      if os.path.exists(a):
            target = input(r'请输入需要查找的目标文件:')
            GGG(target, a)
            break
      print('目录不存在!')


def GGG(target, a):
    list = os.listdir(a)
    for each in list:
      if os.path.isdir(each):
            temp = a
            a = os.path.join(a, each)
            GGG(target, a)
            a = temp
      elif each == target:
            print(a + '\\' + target)

seek()

646134029 发表于 2021-6-4 21:30:59

Twilight6 发表于 2021-6-4 21:25
确实,刚刚没验证代码,a 用了os.getcwd() ,导致获取路径错误

抱歉,现在重新改了下,也测试过了 ...

我知道为啥了哈哈,我一直是在用os.chdir()方法, 你修改后没有用,所以当前的地址不正确

646134029 发表于 2021-6-4 21:33:33

Twilight6 发表于 2021-6-4 21:25
确实,刚刚没验证代码,a 用了os.getcwd() ,导致获取路径错误

抱歉,现在重新改了下,也测试过了 ...

依旧不对,因为这段代码的基本逻辑有一段是os.path.isdir()的方法,用each遍历缺少前缀的路径

Twilight6 发表于 2021-6-4 21:35:47

646134029 发表于 2021-6-4 21:33
依旧不对,因为这段代码的基本逻辑有一段是os.path.isdir()的方法,用each遍历缺少前缀的路径



我这没问题,你是怎么测试的?



Twilight6 发表于 2021-6-4 21:37:44

646134029 发表于 2021-6-4 21:33
依旧不对,因为这段代码的基本逻辑有一段是os.path.isdir()的方法,用each遍历缺少前缀的路径



和 os.path.isdir() 方法没有关系的

646134029 发表于 2021-6-4 21:42:44

Twilight6 发表于 2021-6-4 21:37
和 os.path.isdir() 方法没有关系的

这是我输入的内容

646134029 发表于 2021-6-4 21:44:56

Twilight6 发表于 2021-6-4 21:37
和 os.path.isdir() 方法没有关系的

我把里面的参数改成a + each还是不行

Twilight6 发表于 2021-6-4 21:45:09

646134029 发表于 2021-6-4 21:42
这是我输入的内容


你 input 输入 \ 时不需要转义, Python 会自动转义

你这里输入的路径相当于 D:\\\\迅雷下载

Twilight6 发表于 2021-6-4 21:52:37

646134029 发表于 2021-6-4 21:44
我把里面的参数改成a + each还是不行


看了下 OS 文档,确实和 os.path.isdir 也有关系

{:10_278:}我错了,你把参数改成a +'\\'+ each 即可

PyCharm 自动补全路径了,导致我测试时候以为是 Python 本身就会补全

646134029 发表于 2021-6-4 21:54:24

Twilight6 发表于 2021-6-4 21:52
看了下 OS 文档,确实和 os.path.isdir 也有关系

我错了,你把参数改成a +'\\'+ ea ...

您回复的把我看懵了 =_+

646134029 发表于 2021-6-4 21:57:05

Twilight6 发表于 2021-6-4 21:52
看了下 OS 文档,确实和 os.path.isdir 也有关系

我错了,你把参数改成a +'\\'+ ea ...

感谢这么细心的帮助~~~~~
我想到的是用a+each解决忘了加   '\\'    ~~~

我还验证了一下您说的转移字符,实验了一下又没问题,啊哈哈哈,被你两句话说的好懵逼,以为全部理解错了

Twilight6 发表于 2021-6-4 22:00:50

646134029 发表于 2021-6-4 21:57
感谢这么细心的帮助~~~~~
我想到的是用a+each解决忘了加   '\\'    ~~~





没事没事,太久没遇到 os 模块的 都快忘光了

{:10_278:}

页: [1]
查看完整版本: 脑袋 想爆了 救救孩子