鱼C论坛

 找回密码
 立即注册
查看: 1890|回复: 18

[已解决]脑袋 想爆了 救救孩子

[复制链接]
发表于 2021-6-4 19:58:52 | 显示全部楼层 |阅读模式

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

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

x
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  修不好 求帮助~~
最佳答案
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 函数了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-4 20:00:37 | 显示全部楼层
3个小时了, 依旧不知道问题在哪~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 20:20:37 | 显示全部楼层


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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 函数了

点评

最后一行 os.chdir 拼错了...  发表于 2021-6-4 20:27
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 20:52:13 | 显示全部楼层
Twilight6 发表于 2021-6-4 20:25
帮你稍微改了下代码,参考下吧:

感谢,我仔细看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 21:16:00 | 显示全部楼层
Twilight6 发表于 2021-6-4 20:25
帮你稍微改了下代码,参考下吧:

我实验了一下,代码还是不正确,没有输出值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 21:30:59 | 显示全部楼层
Twilight6 发表于 2021-6-4 21:25
确实,刚刚没验证代码,a 用了os.getcwd() ,导致获取路径错误

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

我知道为啥了哈哈,  我一直是在用os.chdir()方法, 你修改后没有用,所以当前的地址不正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

依旧不对,因为这段代码的基本逻辑有一段是os.path.isdir()的方法,用each遍历缺少前缀的路径
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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



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

Snipaste_2021-06-04_21-35-02.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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



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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 21:42:44 | 显示全部楼层
Twilight6 发表于 2021-6-4 21:37
和 os.path.isdir() 方法没有关系的

这是我输入的内容 1.png 2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 21:44:56 | 显示全部楼层
Twilight6 发表于 2021-6-4 21:37
和 os.path.isdir() 方法没有关系的

我把里面的参数改成  a + each还是不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 21:45:09 | 显示全部楼层
646134029 发表于 2021-6-4 21:42
这是我输入的内容


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

你这里输入的路径相当于 D:\\\\迅雷下载
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 21:52:37 | 显示全部楼层
646134029 发表于 2021-6-4 21:44
我把里面的参数改成  a + each还是不行



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

  我错了,你把参数改成  a +'\\'+ each 即可

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 21:54:24 | 显示全部楼层
Twilight6 发表于 2021-6-4 21:52
看了下 OS 文档,确实和 os.path.isdir 也有关系

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

您回复的把我看懵了 =_+
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-4 21:57:05 | 显示全部楼层
Twilight6 发表于 2021-6-4 21:52
看了下 OS 文档,确实和 os.path.isdir 也有关系

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

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

我还验证了一下您说的转移字符,实验了一下又没问题,啊哈哈哈,被你两句话说的好懵逼,以为全部理解错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 22:00:50 | 显示全部楼层
646134029 发表于 2021-6-4 21:57
感谢这么细心的帮助~~~~~
我想到的是用a+each解决忘了加   '\\'    ~~~



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



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 17:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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