鱼C论坛

 找回密码
 立即注册
查看: 620|回复: 2

[已解决]python文件操作系统课后题

[复制链接]
发表于 2022-2-24 18:45:32 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
import os
File_name = input('请输入待查找的初始目录:')
target_file_name = input('请输入带查找的目标文件:')


def changedir(File_name,target_file_name):
    a = os.chdir(File_name)
    b = os.listdir(File_name)


    for each_one in b:
        if each_one == target_file_name:
            print(os.getcwd()+os.sep+each_one)
        if os.path.isdir(each_one):
            changedir(each_one,target_file_name)
            os.chdir(os.pardir)
changedir(File_name, target_file_name)
看了答案之后自己写的,为什么for循环中的b的位置只能用os.listdir(os.curdir),我这样写就会报错啊
最佳答案
2022-2-24 18:55:58
第一个问题:因为你在递归的过程中,你已经切换到 File_name 下了,当前目录已经没有 File_name 这个目录了,所以你用File_name就会报错了,你应该是 listdir当前目录的

第二个问题:你切换到了下一级目录,递归到没有目录可以递归了,当然要返回上一级目录了
import os
File_name = input('请输入待查找的初始目录:')
target_file_name = input('请输入带查找的目标文件:')


def changedir(File_name,target_file_name):
    os.chdir(File_name)   # 这里只是切换目录,不需要赋值
    b = os.listdir(".")     # 这里应该用当前目录 .


    for each_one in b:
        if each_one == target_file_name:
            print(os.getcwd()+os.sep+each_one)
        if os.path.isdir(each_one):
            changedir(each_one,target_file_name)
            os.chdir(os.pardir)
changedir(File_name, target_file_name)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-24 18:48:48 From FishC Mobile | 显示全部楼层
答案中写的递归后要返回上一层目录也不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-24 18:55:58 | 显示全部楼层    本楼为最佳答案   
第一个问题:因为你在递归的过程中,你已经切换到 File_name 下了,当前目录已经没有 File_name 这个目录了,所以你用File_name就会报错了,你应该是 listdir当前目录的

第二个问题:你切换到了下一级目录,递归到没有目录可以递归了,当然要返回上一级目录了
import os
File_name = input('请输入待查找的初始目录:')
target_file_name = input('请输入带查找的目标文件:')


def changedir(File_name,target_file_name):
    os.chdir(File_name)   # 这里只是切换目录,不需要赋值
    b = os.listdir(".")     # 这里应该用当前目录 .


    for each_one in b:
        if each_one == target_file_name:
            print(os.getcwd()+os.sep+each_one)
        if os.path.isdir(each_one):
            changedir(each_one,target_file_name)
            os.chdir(os.pardir)
changedir(File_name, target_file_name)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-11 17:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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