鱼C论坛

 找回密码
 立即注册
查看: 1461|回复: 7

[已解决]不知道哪里有问题

[复制链接]
发表于 2022-2-13 14:57:17 | 显示全部楼层 |阅读模式

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

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

x
没得到结果,问题出在哪?
import os
def search_file(start,file):
   
    for each in os.listdir(start):
        if each == file:
            print(os.getcwd() + os.sep + file)
        else :
            if os.path.isdir(each):
                search_file(each,file)
                os.chdir(os.pardir)
start = input("请输入待查找的初始目录:")
file = input("请输入需要查找的目标文件:")
search_file(start,file)
代码:查找文件并打印所在路径
最佳答案
2022-2-13 21:03:39

就是用os.cwd(start)切换到start目录下了,如果用的是相对目录的话,
此时的start目录应该是上一级目录的start了,那应该使用"../" + start了,而不是用start
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-2-13 15:20:20 | 显示全部楼层
本帖最后由 isdkz 于 2022-2-13 15:23 编辑


因为你没有切换到初始目录,所以你后面无法通过切换回上一级的方式返回上一层目录

  1. import os
  2. def search_file(start,file):
  3.     os.chdir(start)                      # 注意这里
  4.     for each in os.listdir():           #      注意这里
  5.         if each == file:
  6.             print(os.getcwd() + os.sep + file)
  7.         else :
  8.             if os.path.isdir(each):
  9.                 search_file(os.getcwd() + os.sep + each,file)            #   注意这里
  10.                 os.chdir(os.pardir)
  11. start = input("请输入待查找的初始目录:")
  12. file = input("请输入需要查找的目标文件:")
  13. search_file(start,file)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-13 16:30:43 | 显示全部楼层
isdkz 发表于 2022-2-13 15:20
因为你没有切换到初始目录,所以你后面无法通过切换回上一级的方式返回上一层目录

search_file(os.getcwd() + os.sep + each,file)这里的路径一定得是绝对路径吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-13 16:38:24 | 显示全部楼层
不弃_ 发表于 2022-2-13 16:30
search_file(os.getcwd() + os.sep + each,file)这里的路径一定得是绝对路径吗?


用os.chdir切换到那个目录下了,递归传参的时候可以不用绝对路径的

  1. import os
  2. def search_file(start,file):
  3.     os.chdir(start)                      # 注意这里
  4.     for each in os.listdir():           #      注意这里
  5.         if each == file:
  6.             print(os.getcwd() + os.sep + file)
  7.         else :
  8.             if os.path.isdir(each):
  9.                 search_file(each,file)
  10.                 os.chdir(os.pardir)
  11. start = input("请输入待查找的初始目录:")
  12. file = input("请输入需要查找的目标文件:")
  13. search_file(start,file)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-13 16:57:03 | 显示全部楼层
isdkz 发表于 2022-2-13 16:38
用os.chdir切换到那个目录下了,递归传参的时候可以不用绝对路径的

for each in os.listdir():这里listdir(start)加了路径就报错是怎么回事?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-13 17:01:10 | 显示全部楼层
本帖最后由 isdkz 于 2022-2-13 18:12 编辑
不弃_ 发表于 2022-2-13 16:57
for each in os.listdir():这里listdir(start)加了路径就报错是怎么回事?


因为你不用绝对路径的话,你已经进到start目录下了,当前目录下没有start目录了,
所以你用os.listdir(start)当然报错了,你想用os.listdir(start)的话就得用绝对路径来递归或者加个上级目录也行,
即把 os.listdir(start) 改成 os.listdir(os.pardir + os.sep + start)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-13 18:45:02 | 显示全部楼层
isdkz 发表于 2022-2-13 17:01
因为你不用绝对路径的话,你已经进到start目录下了,当前目录下没有start目录了,
所以你用os.listdir ...

不太好理解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-13 21:03:39 | 显示全部楼层    本楼为最佳答案   

就是用os.cwd(start)切换到start目录下了,如果用的是相对目录的话,
此时的start目录应该是上一级目录的start了,那应该使用"../" + start了,而不是用start
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 05:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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