不弃_ 发表于 2022-2-13 14:57:17

不知道哪里有问题

没得到结果,问题出在哪?
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)
代码:查找文件并打印所在路径

isdkz 发表于 2022-2-13 15:20:20

本帖最后由 isdkz 于 2022-2-13 15:23 编辑


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

import os
def search_file(start,file):
    os.chdir(start)                      # 注意这里
    for each in os.listdir():         #      注意这里
      if each == file:
            print(os.getcwd() + os.sep + file)
      else :
            if os.path.isdir(each):
                search_file(os.getcwd() + os.sep + each,file)            #   注意这里
                os.chdir(os.pardir)
start = input("请输入待查找的初始目录:")
file = input("请输入需要查找的目标文件:")
search_file(start,file)

不弃_ 发表于 2022-2-13 16:30:43

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

search_file(os.getcwd() + os.sep + each,file)这里的路径一定得是绝对路径吗?

isdkz 发表于 2022-2-13 16:38:24

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

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

import os
def search_file(start,file):
    os.chdir(start)                      # 注意这里
    for each in os.listdir():         #      注意这里
      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 16:57:03

isdkz 发表于 2022-2-13 16:38
用os.chdir切换到那个目录下了,递归传参的时候可以不用绝对路径的

for each in os.listdir():这里listdir(start)加了路径就报错是怎么回事?

isdkz 发表于 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)

不弃_ 发表于 2022-2-13 18:45:02

isdkz 发表于 2022-2-13 17:01
因为你不用绝对路径的话,你已经进到start目录下了,当前目录下没有start目录了,
所以你用os.listdir ...

不太好理解{:5_100:}

isdkz 发表于 2022-2-13 21:03:39

不弃_ 发表于 2022-2-13 18:45
不太好理解

就是用os.cwd(start)切换到start目录下了,如果用的是相对目录的话,
此时的start目录应该是上一级目录的start了,那应该使用"../" + start了,而不是用start
页: [1]
查看完整版本: 不知道哪里有问题