鱼C论坛

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

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

[复制链接]
发表于 2021-6-4 20:20:37 | 显示全部楼层


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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 20:25:56 | 显示全部楼层    本楼为最佳答案   


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

  1. import os

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


  11. def GGG(target, a):
  12.     list = os.listdir(a)
  13.     for each in list:
  14.         if os.path.isdir(each):
  15.             a = os.path.join(a, each)
  16.             GGG(target, a)
  17.             a = os.getcwd()
  18.         elif each == target:
  19.             print(os.getcwd() + '\\' + target)

  20. seek()
复制代码


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

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

点评

最后一行 os.chdir 拼错了...  发表于 2021-6-4 20:27
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 21:25:36 | 显示全部楼层
646134029 发表于 2021-6-4 21:16
我实验了一下,代码还是不正确,没有输出值



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

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

参考代码:

  1. import os

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


  10. def GGG(target, a):
  11.     list = os.listdir(a)
  12.     for each in list:
  13.         if os.path.isdir(each):
  14.             temp = a
  15.             a = os.path.join(a, each)
  16.             GGG(target, a)
  17.             a = temp
  18.         elif each == target:
  19.             print(a + '\\' + target)

  20. seek()
复制代码
小甲鱼最新课程 -> https://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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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



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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

你这里输入的路径相当于 D:\\\\迅雷下载
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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



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

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

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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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



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



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-17 03:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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