sxhqyxc 发表于 2021-5-11 10:16:32

30讲第2题

def fun (path, file_name):
    import os
    for each in os.listdir(path):
      if os.path.isfile(each):
            if str(file_name) == str(each):
                print(os.path.join(os.getcwd(), each))
      else:         
            next_path = os.path.join(os.getcwd(), each)
            fun(next_path, file_name)
            
path = input('请输入待查找的初始目录:')
file_name = input('请输入需要查找的目标文件:')
fun(path, file_name)


运行显示溢出,但自己检查了几遍没问题啊
结束判断是判断文件是否为文件夹

Twilight6 发表于 2021-5-11 13:24:31



你只单纯的更改了路径,但是工作路径不会随着你变量值更改而更改,导致你 os.getcwd() 函数返回的总是最初始的工作目录,需要通过 os.chird 来进行更改

参考代码,用 os.chird 函数:
import os

def fun(path, file_name):
    os.chdir(path)
    for each in os.listdir(path):
      if os.path.isfile(each):
            if str(file_name) == str(each):
                print(os.path.join(os.getcwd(), each))
      else:
            next_path = os.path.join(os.getcwd(), each)
            fun(next_path, file_name)
            os.chdir(os.pardir)


path = input('请输入待查找的初始目录:')
file_name = input('请输入需要查找的目标文件:')
fun(path, file_name)

或者不使用 os.getcwd() 函数,手动输入完整路径:

import os

def fun(path, file_name):
    for each in os.listdir(path):
      if os.path.isfile(each):
            if str(file_name) == str(each):
                print(os.path.join(path, each))
      else:
            next_path = os.path.join(path, each)
            fun(next_path, file_name)


path = input('请输入待查找的初始目录:')
file_name = input('请输入需要查找的目标文件:')
fun(path, file_name)

sxhqyxc 发表于 2021-5-11 14:19:57

Twilight6 发表于 2021-5-11 13:24
你只单纯的更改了路径,但是工作路径不会随着你变量值更改而更改,导致你 os.getcwd() 函数返回的总是 ...

你的第二个方法好像不行,
在if os.path.isfile()后面括号里应该输入each的绝对路径

def fun (path, file_name):
    import os
    for each in os.listdir(path):
      each_path = os.path.join(path, each)
      if os.path.isfile(each_path):
            if str(file_name) == str(each):
                print(each_path)
      else:
            next_path = each_path
            fun(next_path, file_name)
            
path = input('请输入待查找的初始目录:')
file_name = input('请输入需要查找的目标文件:')
fun(path, file_name)

Twilight6 发表于 2021-5-11 15:32:39

sxhqyxc 发表于 2021-5-11 14:19
你的第二个方法好像不行,
在if os.path.isfile()后面括号里应该输入each的绝对路径



我执行并没有问题,而且建议 improt 导入建议放在代码头部,递归过程也反复 import

sxhqyxc 发表于 2021-5-11 15:53:58

Twilight6 发表于 2021-5-11 15:32
我执行并没有问题,而且建议 improt 导入建议放在代码头部,递归过程也反复 import

好的谢谢大佬解答
页: [1]
查看完整版本: 30讲第2题