鱼C论坛

 找回密码
 立即注册
查看: 3485|回复: 1

[已解决]求指点

[复制链接]
发表于 2022-7-28 23:22:15 | 显示全部楼层 |阅读模式

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

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

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

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: [WinError 3] 系统找不到指定的路径。: 'a'


'for c in os.listdir(a): ' 中的'a'不是已经定义了吗?为什么找不到
最佳答案
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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-29 08:50:08 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 21:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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