脑袋 想爆了 救救孩子
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修不好 求帮助~~ 3个小时了, 依旧不知道问题在哪~~~
你的错误原因是因为你只更改了工作目录,但是你没有更改 a 的路径值,从而导致没有返回上一层目录
帮你稍微改了下代码,参考下吧:
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 函数了
Twilight6 发表于 2021-6-4 20:25
帮你稍微改了下代码,参考下吧:
感谢,我仔细看看 Twilight6 发表于 2021-6-4 20:25
帮你稍微改了下代码,参考下吧:
我实验了一下,代码还是不正确,没有输出值 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() Twilight6 发表于 2021-6-4 21:25
确实,刚刚没验证代码,a 用了os.getcwd() ,导致获取路径错误
抱歉,现在重新改了下,也测试过了 ...
我知道为啥了哈哈,我一直是在用os.chdir()方法, 你修改后没有用,所以当前的地址不正确 Twilight6 发表于 2021-6-4 21:25
确实,刚刚没验证代码,a 用了os.getcwd() ,导致获取路径错误
抱歉,现在重新改了下,也测试过了 ...
依旧不对,因为这段代码的基本逻辑有一段是os.path.isdir()的方法,用each遍历缺少前缀的路径 646134029 发表于 2021-6-4 21:33
依旧不对,因为这段代码的基本逻辑有一段是os.path.isdir()的方法,用each遍历缺少前缀的路径
我这没问题,你是怎么测试的?
646134029 发表于 2021-6-4 21:33
依旧不对,因为这段代码的基本逻辑有一段是os.path.isdir()的方法,用each遍历缺少前缀的路径
和 os.path.isdir() 方法没有关系的
Twilight6 发表于 2021-6-4 21:37
和 os.path.isdir() 方法没有关系的
这是我输入的内容 Twilight6 发表于 2021-6-4 21:37
和 os.path.isdir() 方法没有关系的
我把里面的参数改成a + each还是不行 646134029 发表于 2021-6-4 21:42
这是我输入的内容
你 input 输入 \ 时不需要转义, Python 会自动转义
你这里输入的路径相当于 D:\\\\迅雷下载 646134029 发表于 2021-6-4 21:44
我把里面的参数改成a + each还是不行
看了下 OS 文档,确实和 os.path.isdir 也有关系
{:10_278:}我错了,你把参数改成a +'\\'+ each 即可
PyCharm 自动补全路径了,导致我测试时候以为是 Python 本身就会补全
Twilight6 发表于 2021-6-4 21:52
看了下 OS 文档,确实和 os.path.isdir 也有关系
我错了,你把参数改成a +'\\'+ ea ...
您回复的把我看懵了 =_+ Twilight6 发表于 2021-6-4 21:52
看了下 OS 文档,确实和 os.path.isdir 也有关系
我错了,你把参数改成a +'\\'+ ea ...
感谢这么细心的帮助~~~~~
我想到的是用a+each解决忘了加 '\\' ~~~
我还验证了一下您说的转移字符,实验了一下又没问题,啊哈哈哈,被你两句话说的好懵逼,以为全部理解错了
646134029 发表于 2021-6-4 21:57
感谢这么细心的帮助~~~~~
我想到的是用a+each解决忘了加 '\\' ~~~
没事没事,太久没遇到 os 模块的 都快忘光了
{:10_278:}
页:
[1]