鱼C论坛

 找回密码
 立即注册
查看: 812|回复: 5

[已解决]想用递归的方式搜索文件,执行了没反应

[复制链接]
发表于 2018-12-16 21:38:51 | 显示全部楼层 |阅读模式

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

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

x
我在写python零基础入门第30讲的课后习题第2课,想用递归的方式
import os

dir_top = input('要搜索的目录:')
name = input('要搜索的文件')

def search(dir_top,name):

    f = os.listdir(dir_top)

    for i in f:
        if os.path.isdir(i):
            search(i,name)
        else:
            if i == name:
                m = os.path.join(os.getcwd(),i)
                print(m)

search(dir_top,name)


可程序执行没有反应,连报错都没有,然后我简化了代码,想看一下问题出在哪里
import os

dir1 = '/Users/jinxin/Desktop/Python 学习/class'

f = os.listdir(dir1)

print(f)

for i in f:
    if os.path.isdir(i):
        print(i + '是个目录')

改成这样还是没有反应。程序执行到print(f)就结束了,解释器输出(['.DS_Store', '函数', 'IO', '数据类型']),for循环后面的语句就是不执行。
最佳答案
2018-12-16 23:08:58
  1. import os

  2. dir_top = input('要搜索的目录:')
  3. name = input('要搜索的文件')

  4. def search(dir_top,name):
  5.     f = os.chdir(dir_top)  #校准目录

  6.     for i in os.listdir(f):
  7.         if os.path.isdir(i):
  8.             search(i,name)
  9.             os.chdir(os.pardir)   #要递归回去啊

  10.         #else:
  11.         if i==name:
  12.             m = os.path.join(os.getcwd(), i)
  13.             print(m)

  14. search(dir_top,name)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-16 22:43:09 | 显示全部楼层
本帖最后由 Stubborn 于 2018-12-16 23:09 编辑

你open打开一个目录干嘛?看错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-16 22:45:02 | 显示全部楼层
本帖最后由 Stubborn 于 2018-12-16 23:09 编辑

import os

dir_top = input('要搜索的目录:')
name = input('要搜索的文件')

def search(dir_top,name):
    f = os.chdir(dir_top)

    for i in os.listdir(f):
        if os.path.isdir(i):
            search(i,name)
            os.chdir(os.pardir)   #要递归回去啊

        #else:
        if i==name:
            m = os.path.join(os.getcwd(), i)
            print(m)

search(dir_top,name)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-16 23:08:58 | 显示全部楼层    本楼为最佳答案   
  1. import os

  2. dir_top = input('要搜索的目录:')
  3. name = input('要搜索的文件')

  4. def search(dir_top,name):
  5.     f = os.chdir(dir_top)  #校准目录

  6.     for i in os.listdir(f):
  7.         if os.path.isdir(i):
  8.             search(i,name)
  9.             os.chdir(os.pardir)   #要递归回去啊

  10.         #else:
  11.         if i==name:
  12.             m = os.path.join(os.getcwd(), i)
  13.             print(m)

  14. search(dir_top,name)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-12-17 10:20:11 | 显示全部楼层
os.path.isdir()参数需要是路径
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-17 11:10:22 | 显示全部楼层

谢谢,看懂了。一个是没有校准目录,一个是递归后没有返回上一级目录。两个问题一直没搞明白
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-19 16:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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