|
30鱼币
我是看零基础学python教程自学的,今天刚好看到第30讲文件系统的时候想写一个关于文件搜索的代码,结果有很多地方都出错逻辑怪怪的
大部分解决了,现在出现了几个问题,想问怎么解决?
1、访问错误的问题,错误如图所示
可以看到百度搜索中那个测试访问权限的os.access(path.mode)方法并不好用
2、我判断是否是文件还是目录的方法用的是pathllib的内置方法,感觉很繁琐,有没有改进的方法,之前用的os.splitext('.'),没想到电脑里面居然有没有扩展名的文件,还有在名字里面加 ‘.‘ 的文件,我很气愤,然后挂了
3、我感觉自己在文件递归的时候那个判断条件有点问题,逻辑怪怪的,有没有啥改进的办法
问题有点多,所以给出我珍藏的30鱼币啦!!!
- import os
- import pathlib
- name = input('请输入要搜索的文件名:')
- route = input('请输入要搜索的路径:')
- save = []
- def find_file(name,file_list):
- for file in file_list:
- if name in file:#判断是否有要搜索的文件,保存在新的列表中
- dirname = os.path.dirname(os.getcwd())
- save.append(dirname+file)
- def loop(name,curdir,pardir=0):
- if os.access(curdir,os.R_OK):
- os.chdir(curdir)
- file_list = os.listdir(os.getcwd())
- print('\n')
- print(os.getcwd(),end = '\n\n')
- find_file(name,file_list)
- dirname = os.getcwd()
- folder =[]
- for file in file_list:
- file_path = dirname+'\\'+file
- path = pathlib.Path(file_path)
- print(path)
- print(path.is_dir())
- if path.is_dir():
- folder.append(file)
-
- if folder == []:
- if pardir ==0:
- return None
- else:
- return os.chdir('..')
- else:
- for subdir in folder:
- print(subdir,curdir,pardir)
- loop(name,subdir,curdir)
- else:
- return os.chdir('..')
- loop(name,route+'\\')
-
- for file_maybe in save:
- print(file_maybe)
复制代码
本帖最后由 jackz007 于 2018-9-5 18:36 编辑
没有什么好办法,把程序中出错的语句加到 try ... except 语句块中。
- import os
- import pathlib
- name = input('请输入要搜索的文件名:')
- route = input('请输入要搜索的路径:')
- save = []
- def find_file(name,file_list):
- for file in file_list:
- if name in file:#判断是否有要搜索的文件,保存在新的列表中
- dirname = os.path.dirname(os.getcwd())
- save.append(dirname+file)
- def loop(name,curdir,pardir=0):
- f = false
- if os.access(curdir,os.R_OK) and os.access(curdir,os.X_OK):
- try:
- os.chdir(curdir)
- f = true
- except:
- pass
- if f:
- file_list = os.listdir(os.getcwd())
- print('\n')
- print(os.getcwd(),end = '\n\n')
- find_file(name,file_list)
- dirname = os.getcwd()
- folder =[]
- for file in file_list:
- file_path = dirname+'\\'+file
- path = pathlib.Path(file_path)
- print(path)
- print(path.is_dir())
- if path.is_dir():
- folder.append(file)
-
- if folder == []:
- if pardir ==0:
- return None
- else:
- return os.chdir('..')
- else:
- for subdir in folder:
- print(subdir,curdir,pardir)
- loop(name,subdir,curdir)
- else:
- return os.chdir('..')
- loop(name,route+'\\')
-
- for file_maybe in save:
- print(file_maybe)
复制代码
搜索文件你为什么不用现成的 os . walk() ,可以大幅度简化你的代码,不妨参考一下有关资料。
|
最佳答案
查看完整内容
没有什么好办法,把程序中出错的语句加到 try ... except 语句块中。
搜索文件你为什么不用现成的 os . walk() ,可以大幅度简化你的代码,不妨参考一下有关资料。
|