|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各路大神,下面这段代码是小甲鱼课后作业的答案:
- import os
- def search_file(start_dir, target) :
- os.chdir(start_dir)
-
- for each_file in os.listdir(os.curdir) :
- if each_file == target :
- print(os.getcwd() + os.sep + each_file) # 使用os.sep是程序更标准
- if os.path.isdir(each_file) :
- search_file(each_file, target) # 递归调用
- os.chdir(os.pardir) # 递归调用后切记返回上一层目录
- start_dir = input('请输入待查找的初始目录:')
- target = input('请输入需要查找的目标文件:')
- search_file(start_dir, target)
复制代码
运行后
请问这个异常是怎么回事?
本帖最后由 jackz007 于 2018-11-10 12:31 编辑
在执行程序第 4 行 chdir(start_dir) 当变量 start_dir = 'E:\System Volume Information' 的时候,发生无权访问错误,这个很正常,因为这是一个系统文件夹,用户无权访问,即使用资源管理器试图打开也会报错。
修改方法是把有风险的指令加到 try ... except 语句块里面,这样,如果目标路径访问正常就继续,否则就略过。
- import os
- def search_file(start_dir, target) :
- f = True
- try :
- os.chdir(start_dir)
- except :
- f = False
- if f :
- for each_file in os.listdir(os.curdir) :
- if each_file == target :
- print(os.getcwd() + os.sep + each_file) # 使用os.sep是程序更标准
- if os.path.isdir(each_file) :
- search_file(each_file, target) # 递归调用
- os.chdir(os.pardir) # 递归调用后切记返回上一层目录
- start_dir = input('请输入待查找的初始目录:')
- target = input('请输入需要查找的目标文件:')
- search_file(start_dir, target)
复制代码
楼主的代码全程采用的是相对路径,下面给出绝对路径的版本
- import os
- def search_file(start_dir , target) :
- if os.path.exists(start_dir) and os.path.isdir(start_dir) :
- f = True
- try :
- files = os.listdir(start_dir)
- except :
- f = False
- if f :
- for each_file in files :
- path = os.path.join(start_dir , each_file)
- if each_file == target :
- print path
- if os.path.isdir(path) :
- search_file(path , target)
- start_dir = raw_input('请输入待查找的初始目录:')
- target = raw_input('请输入需要查找的目标文件:')
- search_file(start_dir, target)
复制代码
此外,像遍历文件、目录这样的操作,python 设计了专用的函数 os.walk(),可以使代码更加简练,于是,楼主的作业就可以有第2个版本了:
- import os
- def search_file(start_dir, target):
- for root , dirs , files in os.walk(start_dir):
- for dir in dirs:
- if dir == target:
- print os.path.join(root , dir)
- for file in files:
- if file == target:
- print os.path.join(root , file)
- start_dir = input('请输入待查找的初始目录:')
- target = input('请输入需要查找的目标文件:')
- search_file(start_dir, target)
复制代码
|
|