起因: 也不知道具体什么起因了,貌似是嫌弃微软的那个搜索文件找东西很慢太拉跨,有了python就自己弄一个,网上也很多,但自己写出来得总归感觉不一样,也算是自己得练习了 代码执行的效果大概如下图所示: 下面把具体思路以及代码分享贴出,自己目前小白菜鸟一枚,各路大神多担待,如有指教,感激不尽 一、主要使用的模块以及方法 模块:python 自带的 os 以及 time 模块,time模块没发挥太多作用 方法:
- os.path.isdir() #判断路径文件是否是文件夹,是返回True,反之False
- os.path.isfile() #判断路径文件是否是文件,是返回True,反之False
- os.path.abspath() # 得到一个当前传入路径的绝对路径
- os.path.dirname() # 传入 file 获取当前文件所在路径的父级目录
- os.listdir() # 传入一个目录,得到该目录下的子级文件或文件名的列表,不含父级目录
- time.time() # 获取到当前时间戳
- str.index() #内置字符串查找方法,当传入的值中在str中时得到传入值得下标,如果没有则抛出异常值: ValueError
二、主要思路以及代码
- 简单开头,前面这一堆基本废话,一个刚入门得小白也是完全没问题得,主要是通过输入需要查找父级文件夹和需要查找得文件进行判断已经定义一些下面需要使用的变量
user_route = input('\n请输入查询路径后按下回车,不输入直接回车将从当前文件位置开始查找:')
user_file = input('请输入查找文件名,如果直接输入全部文件请直接回车:')
father_route = os.path.abspath(user_route)
find_file_list = []
find_file_name = '☆ 找到文件 >> '
find_dir_name = '★ 找到文件夹 >> '
if user_route == '':
father_route = os.path.dirname(__file__)
father_bool = os.path.isdir(father_route)
if not father_bool:
print('别闹,你的路径有问题,看清楚了')
continue
start_time = time.time()
total_file = 0
total_dir = 0
- 关键位置下面是主要执行文件查找得递归函数,主要的思路是在该函数中传入查找的父级目录,先通过方法 os.path.isdir() 判断传入的是不是一个目录,如果是就通过 os.listdir()方法查找该目录的下一级中的所有文件或文件夹得到一个列表,通过遍历该列表得到文件或文件夹名,再进行地址拼接得到一个准确的文件地址,继续通过 两个方法【 os.path.isdir() 和 os.path.isfile()】对拼接的文件地址进行判断,如果已经是文件了就直接输出地址,如果是文件夹就继续进行递归查询。希望讲明白了😂
def find_path(dir_father):
global total_file, total_dir
father_bool = os.path.isdir(dir_father)
if father_bool:
dir_list = os.listdir(dir_father)
for dir in dir_list:
dir_child = dir_father + '\\' + dir
dir_bool = os.path.isfile(dir_child)
if dir_bool:
total_file += 1
try:
index = dir_child.index(user_file)
if index > 1:
print(find_file_name+dir_child)
find_file_list.append(dir_child)
else:
print(dir_child)
except ValueError:
print('\t'+dir_child)
else:
try:
index = dir_child.index(user_file)
if index > 1:
print(find_dir_name+dir_child)
find_file_list.append(dir_child)
else:
print(dir_child)
except ValueError:
pass
find_path(dir_child)
total_dir += 1
find_path(father_route)
- 无关痛痒 这里和开头差不多,没太多好说的,就是最后代码执行完毕后对结果进行输出
end_time = time.time()
total_time = end_time - start_time
print('\n总共查找了{}个文件夹,查询到了{}个文件,耗时{}秒'.format(
total_dir, total_file, total_time))
if user_file != '':
file_len = len(find_file_list)
if file_len == 0:
print('未查找到该文件或文件夹')
else:
print('查找到的文件以及文件夹共有【{}】个:以下是查询文件的具体位置\n'.format(file_len))
for file in find_file_list:
print(file)
三、最后附上全部源码
import os
import time
while True:
user_route = input('\n请输入查询路径后按下回车,不输入直接回车将从当前文件位置开始查找:')
user_file = input('请输入查找文件名,如果直接输入全部文件请直接回车:')
father_route = os.path.abspath(user_route)
find_file_list = []
find_file_name = '☆ 找到文件 >> '
find_dir_name = '★ 找到文件夹 >> '
if user_route == '':
father_route = os.path.dirname(__file__)
father_bool = os.path.isdir(father_route)
if not father_bool:
print('别闹,你的路径有问题,看清楚了')
continue
print('开始执行,当前文件夹是:', father_route, '\n以下是当前文件夹中查找到的文件:')
print('\n'+'*'*100)
start_time = time.time()
total_file = 0
total_dir = 0
def find_path(dir_father):
global total_file, total_dir
father_bool = os.path.isdir(dir_father)
if father_bool:
dir_list = os.listdir(dir_father)
for dir in dir_list:
dir_child = dir_father + '\\' + dir
dir_bool = os.path.isfile(dir_child)
if dir_bool:
total_file += 1
try:
index = dir_child.index(user_file)
if index > 1:
print(find_file_name+dir_child)
find_file_list.append(dir_child)
else:
print(dir_child)
except ValueError:
print('\t'+dir_child)
else:
try:
index = dir_child.index(user_file)
if index > 1:
print(find_dir_name+dir_child)
find_file_list.append(dir_child)
else:
print(dir_child)
except ValueError:
pass
find_path(dir_child)
total_dir += 1
find_path(father_route)
print('\n'+'*'*100)
end_time = time.time()
total_time = end_time - start_time
print('\n总共查找了{}个文件夹,查询到了{}个文件,耗时{}秒'.format(
total_dir, total_file, total_time))
if user_file != '':
file_len = len(find_file_list)
if file_len == 0:
print('未查找到该文件或文件夹')
else:
print('查找到的文件以及文件夹共有【{}】个:以下是查询文件的具体位置\n'.format(file_len))
for file in find_file_list:
print(file)
break
|