可怖大魔王 发表于 2022-7-28 23:22:15

求指点

敲了这样的代码,为什么会出错

import os
def find(a,b):
    os.chdir(a)
   
    for c in os.listdir(a):
      if c == b:
            print (os.getcwd() + os.sep + c)
      if os.path.isdir(c):
            find(c,b)
            os.chdir(os.pardir)
      
               
a = input('请输入待查找的初始目录:')
b = input('请输入待查找的文件:')
find(a,b)

Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\python\试验用.py", line 15, in <module>
    find(a=x,b=y)
File "C:\Users\Administrator\Desktop\python\试验用.py", line 9, in find
    find(c,b)
File "C:\Users\Administrator\Desktop\python\试验用.py", line 5, in find
    for c in os.listdir(a):
FileNotFoundError: 系统找不到指定的路径。: 'a'


'for c in os.listdir(a): ' 中的'a'不是已经定义了吗?为什么找不到

jackz007 发表于 2022-7-29 08:50:08

本帖最后由 jackz007 于 2022-7-29 09:48 编辑

       改变和恢复当前路径的条件不对等,导致代码逻辑存在严重缺陷
import os
def find(a,b):
    os.chdir(a)                  # 这里无条件改变了当前路径
   
    for c in os.listdir(a):
      if c == b:
            print (os.getcwd() + os.sep + c)
      if os.path.isdir(c):
            find(c,b)
            os.chdir(os.pardir)   # 恢复当前路径也必须是无条件的!
      
               
a = input('请输入待查找的初始目录:')
b = input('请输入待查找的文件:')
find(a,b)
      应该这么改
import os
def find(a,b):
    r = os . getcwd()                        # 改变当前路径之前,应该先获取当前路径
    os . chdir(a)                              # 改变当前路径是无条件的
   
    for c in os . listdir(a):
      if os . path . isfile(c):            # 需要查找的应该是文件,而不是子目录
            if c . lower() == b . lower():   # Windows 文件名忽略英文大小写字母   
                print (os.getcwd() + os.sep + c)
      elif os . path . isdir(c):
            find(c , b)
    os . chdir(r)                              # 【关键】:恢复当前路径也必须是无条件的,重点在代码的缩进位置
      
a = input('请输入待查找的初始目录:')
b = input('请输入待查找的文件:')
find(a,b)      
      下面是我编写的代码,重点在全程使用绝对路径,不使用 os . chdir() 改变当前目录,供楼主参考:
import os
def find(a , b):
    try:                               #防止搜索无权限目录出错
      for c in os . listdir(a):
            d = os . path . join(a , c)
            if os . path . isfile(d):
                if c . lower() == b . lower():
                  print(d)
            elif os . path . isdir(d):
                find(d , b)
    except Exception as e:             #如果搜索无权限目录异常会被这条语句捕获
      print(e)

a = input('请输入待查找的初始目录:') . strip()
if a:
    b = input('请输入待查找的文件:') . strip()
    if b:
      find(a , b)
页: [1]
查看完整版本: 求指点