鱼C论坛

 找回密码
 立即注册
查看: 882|回复: 4

[已解决]30文件系统 第2题

[复制链接]
发表于 2020-5-8 14:15:26 | 显示全部楼层 |阅读模式
5鱼币
小甲鱼的代码:

import os

def search_file(start_dir, target) :
    os.chdir(start_dir)
   
    for each_file in os.listdir(os.curdir) :
        if each_file == target :
            print(os.getcwd() + os.sep + each_file) # 使用os.sep是程序更标准
        if os.path.isdir(each_file) :
            search_file(each_file, target) # 递归调用
            os.chdir(os.pardir) # 递归调用后切记返回上一层目录

start_dir = input('请输入待查找的初始目录:')
target = input('请输入需要查找的目标文件:')
search_file(start_dir, target)



关于这道题的第10行代码 search_file(each_file, target) #递归调用
each_file 不是只是一个字符串么 比如 ‘新建文件夹1号’ 这种样子
运行os.chdir(start_dir) 为什么不会报错说找不到呢?我试了一下在外部运行os.chdir(‘新建文件夹’)会显示找不到地方
最佳答案
2020-5-8 14:15:27
已经os.chdir(start_dir),当前目录已经是工作目录了,在工作目录下直接os.chdir(仅目录名)是正常操作,不需要完整路径,举例来说:你要查找的目录是D:\dir1,下面有一个subdir的子目录,代码首先运行os.chdir('D:\dir1'),当前目录转为D:\dir1,os.dir遍历时发现了subdir是个目录,递归运行了search_file('subdir', target),那么下一步就运行了
os.chdir('subdir')进入了subdir子目录进行下一步的操作,因为subdir就在dir1下面,所以无需'D:\dir1\subdir',只用目录名'subdir'就可以了。
批注 2020-05-08 175836.png

最佳答案

查看完整内容

已经os.chdir(start_dir),当前目录已经是工作目录了,在工作目录下直接os.chdir(仅目录名)是正常操作,不需要完整路径,举例来说:你要查找的目录是D:\dir1,下面有一个subdir的子目录,代码首先运行os.chdir('D:\dir1'),当前目录转为D:\dir1,os.dir遍历时发现了subdir是个目录,递归运行了search_file('subdir', target),那么下一步就运行了 os.chdir('subdir')进入了subdir子目录进行下一步的操作,因为subdir就在dir1下面 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-8 14:15:27 | 显示全部楼层    本楼为最佳答案   
已经os.chdir(start_dir),当前目录已经是工作目录了,在工作目录下直接os.chdir(仅目录名)是正常操作,不需要完整路径,举例来说:你要查找的目录是D:\dir1,下面有一个subdir的子目录,代码首先运行os.chdir('D:\dir1'),当前目录转为D:\dir1,os.dir遍历时发现了subdir是个目录,递归运行了search_file('subdir', target),那么下一步就运行了
os.chdir('subdir')进入了subdir子目录进行下一步的操作,因为subdir就在dir1下面,所以无需'D:\dir1\subdir',只用目录名'subdir'就可以了。
批注 2020-05-08 175836.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-8 14:51:54 | 显示全部楼层
首先说os.chdir(start_dir),start_dir是由你输入的路径名,你输入正确,当然就不会报错,输错了就会报错,注意最好输入完整的路径,包括盘符。
search_file(each_file, target),这里的each_file是os.listdir(os.curdir)找出的当前目录下所有文件和目录名,名字肯定是个字符串,然后由 os.path.isdir(each_file)判断如果是目录名就递归到目录下继续查找。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-8 16:27:41 | 显示全部楼层
txxcat 发表于 2020-5-8 14:51
首先说os.chdir(start_dir),start_dir是由你输入的路径名,你输入正确,当然就不会报错,输错了就会报错, ...

名字(each_file) 只是字符串而不是完整路径名称的话,os.chdir(each_file) (code第三行start_dir就被设置成了each_file对吧?) 不就会报错了么,为什么在这个code里不会报错呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-9 03:56:41 | 显示全部楼层
txxcat 发表于 2020-5-8 14:51
首先说os.chdir(start_dir),start_dir是由你输入的路径名,你输入正确,当然就不会报错,输错了就会报错, ...

明白了!非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 05:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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