python第30讲作业第2题 检索文件是否存在 请帮忙看看我的程序为什么不对
编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索,程序实现如图:
程序的思路我都写在代码注释里了,自己看了一下午也没看出来哪里出错了,有个BUG我是知道的,可是避开这个BUG结果也不对,请各位帮忙看看哪里出错了!谢谢大家!
path = input('请输入待查找的初始目录:')
name = input('请输入需要查找的目标文件:')
import os
i = j = 1 # ij赋初值
while 1:
all_files = os.listdir(path) # 第一层路径的所有文件
# 共有三种文件:名字一样的、文件夹、名字不一样的其他文件
for each_file in all_files:
if each_file == name: # 如果是名字一样的文件(第一种)
print(path + '\\'+ each_file) # 打印路径 + 文件名
elif os.path.isdir(path + '\\'+ each_file):# 如果是文件夹(第二种)
path = path + '\\'+ each_file # 把路径更改成这个文件夹的路径,退出for循环,重新进入while循环
break # Bug:只能检索当前路径下的第一个文件夹并逐层检索下去,如果有多个文件夹,则其他文件夹无法检索,因为已经跳出了此轮for循环
else: # 如果是第三种
for each_file in all_files: # 判断当前路径中是否有文件夹
if os.path.isdir(path + '\\'+ each_file): # 如果当前路径中有文件夹
i = 0 # 引入变量i
break # 退出这个for循环
else: # 如果当前路径中没有有文件夹,说明检索完毕
j = 0 # 引入变量j
break # 退出这个for循环
if i == 0: # 如果 i == 0 ,说明当前路径中有文件夹
continue # 继续上一层for循环判断下一个each_file
if j == 0 : # 如果 j == 0,说明当前路径中没有文件夹,检索完毕
break # 退出上一层for循环
if j == 0:
print('当前路径不存在该文件!') # 检索完毕打印
break # 退出while循环 24行的else应该和for齐平 BngThea 发表于 2020-4-21 19:39
24行的else应该和for齐平
这组 if else是在for下面的呀,和for齐平的话是和哪个if对应呢?
而且结果还是不对 兄弟for循环使用错了,参考下
while a:
all_files = os.listdir(path)
print (all_files)
for index,item in enumerate(all_files):
if item == name:
print('zhen')
a = a -1
break yangxuebabe 发表于 2020-4-21 19:44
这组 if else是在for下面的呀,和for齐平的话是和哪个if对应呢?
而且结果还是不对
else可以和for对应,表示正常循环完的操作 均昊山 发表于 2020-4-21 19:56
兄弟for循环使用错了,参考下
while a:
all_files = os.listdir(path)
不好意思没太明白错在哪里了。。
BngThea 发表于 2020-4-21 20:02
else可以和for对应,表示正常循环完的操作
但是结果还是不对呀。。。 yangxuebabe 发表于 2020-4-21 20:11
但是结果还是不对呀。。。
结果不对是你代码的逻辑问题 本帖最后由 均昊山 于 2020-4-21 20:50 编辑
yangxuebabe 发表于 2020-4-21 20:11
但是结果还是不对呀。。。
兄弟参考这个,后缀名判断一下
path = input('请输入待查找的初始目录:')
name = input('请输入需要查找的目标文件:')
a = 1
import os
i = 1 # ij赋初值
while i:
all_files = os.listdir(path) # 第一层路径的所有文件
# 共有三种文件:名字一样的、文件夹、名字不一样的其他文件
#print (all_files)
for index,item in enumerate(all_files):
if item == name: # 如果是名字一样的文件(第一种)
print(path + '\\'+ all_files) # 打印路径 + 文件名
i = i-1
break
if i == 1:
os.path.isdir(path + '\\'+ all_files)# 如果是文件夹(第二种)
path = path + '\\'+ all_files # 把路径更改成这个文件夹的路径,退出for循环,重新进入while循环
for index,item in enumerate(all_files):
if item == name:
print(path + '\\'+ all_files) # 打印路径 + 文件名
i = i-1
break
for循环里得结合4楼,获取的内容,for循环里if判断里多少次?
BngThea 发表于 2020-4-21 20:19
结果不对是你代码的逻辑问题
能说一下是哪里出错了吗{:5_91:} 均昊山 发表于 2020-4-21 20:48
兄弟参考这个,后缀名判断一下
path = input('请输入待查找的初始目录:')
name = input('请输入需要 ...
您的代码这段代码是不是有点问题:
一旦遇到目标文件,打印之后 i=0,退出for循环,进入while循环,此时路径没变,all_files没变,一切都没变,不是陷入循环出不来了吗? path = input('请输入待查找的初始目录:')
name = input('请输入需要查找的目标文件:')
import os
j = 1
count = 0
while j:
all_files = os.listdir(path)
for each_file in all_files:
if each_file == name:
print(path + '\\'+ each_file)
count += 1
elif os.path.isdir(path + '\\'+ each_file):
path = path + '\\'+ each_file
break# Bug1:只能检索当前路径下的第一个文件夹并逐层检索下去,如果有多个文件夹,则其他文件夹无法检索,因为已经跳出了此轮for循环
else: # 如果是第三种,判断当前路径中是否有文件夹,利用文件夹的后缀为空这一特性
ext_list = [] # 所有文件后缀列表
for each_file in all_files:
ext = os.path.splitext(each_file) # 取每个文件的后缀
ext_list.append(ext)
if '' in ext_list: # 文件夹后缀为空,如果当前路径中有文件夹
continue # 继续上一层for循环判断下一个each_file
else: # 如果当前路径中没有文件夹,说明检索完毕,跳出所有循环
j = 0
if j == 0 :
break
if count == 0:
print('当前路径不存在该文件!')
我自己修改了一下代码,现在只有那个Bug了,可以帮忙完善一下吗?
页:
[1]