python 学习编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出绝对路径。
程序员文章站
2022-05-30 14:45:48
...
源码
对着几个库方法自己撸出来的,适用性和优化做的太差了。好绕
# 编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出绝对路径。
import os
def printStrFile(arg):
main_dir = [x for x in os.listdir('.')]
file_list = [x for x in main_dir if os.path.isfile(x)]
dir_list = [x for x in main_dir if os.path.isdir(x)]
for x in file_list:
if(arg in x):
result_list.append(os.path.abspath(x))
# 开始
recursion_list(dir_list, arg, result_list)
# 输出结果
if result_list == []:
print('No Match (*^▽^*)')
else:
for x in result_list:
print(x)
# 递归遍历目录,传参分别为只含目录的列表,比对字符串,结果list,和上一级的path
def recursion_list(Dir__List, arg, mainList, fatherPath=''):
# List是目录的集合
if Dir__List == []:
return
for item in Dir__List:
# 如果是第一次递归 则没有父亲路径
if fatherPath:
# 当前目录的绝对路径
dir_path = os.path.join(fatherPath, item)
else:
dir_path = os.path.abspath(item)
file_list = [x for x in os.listdir(
dir_path) if os.path.isfile(os.path.join(dir_path, x))]
dir_list = [x for x in os.listdir(
dir_path) if os.path.isdir(os.path.join(dir_path, x))]
for x in file_list:
if(arg in x):
mainList.append(os.path.abspath(os.path.join(dir_path, x)))
# 获取到当前目录下的目录文件列表,开始下一次递归
recursion_list(dir_list, arg, result_list, os.path.abspath(item))
result_list = []
match_str = input('Please enter a String to match the file in this DIR ヽ( ̄▽ ̄)ノ \n')
printStrFile(match_str)
知识点
os.listdir()
返回的是指定路径下文件和文件夹的列表,值是字符串。此时如果用os.path.abspath()
解析的话,会返回当前路径(程序运行路径)的绝对路径,所以两者不太匹配,我一直觉得是我库方法用错了,处理起来超级麻烦
上一篇: 写一个脚本:要求打印出本机当前用户名,主机名,当前时间,IP
下一篇: Linux命令示例