用python的os模块遍历传入的路径,基于遍历的路径判断是否包含有需要查找的关键字
根据os.name判断当前是什么系统 == "nt"为windows =="posix"为linux系统
使用递归完成目录的遍历
下面是代码
import os
# 定义默认的数据文件路径,根据操作系统环境变量获取用户桌面路径并拼接文件名
datafile = os.path.join(os.environ.get('USERPROFILE'), "Desktop\\datafile.txt") if os.name == "nt" else os.path.join(
os.environ.get('HOME'), "datafile.txt")
# 根据操作系统类型设置路径分隔符
sep = "/" if os.name == "posix" else "C:\\"
# 用户输入要查找的文件关键字
keywork = input("请输入你要查找的文件命中所包含的关键字:")
# 用户输入要查找的文件可能存放的路径,默认为当前系统根目录
path = input("请输入你要查找的文件可能存放的路径,默认为C:\\或/:") # ""
# 如果用户没有输入路径,则使用默认的路径分隔符作为路径
path = path if path else sep
# 检查用户输入的是否为一个存在的目录
if not os.path.isdir(path):
print('你输入的不是一个目录或不存在')
exit()
# 初始化两个列表,用于存储符合条件的文件路径和所有遍历过的文件路径
# 查找到的文件存放的列表
data_list = []
# 所有查找过程中出现的文件存放的列表
all_list = []
# 递归查找文件的函数
def find_file(path):
# 切换到指定目录下
try:
os.chdir(path=path) # 切换到用户指定的目录
# 查看这个目录下所有的文件和子目录
file_list = os.listdir() # 获取目录下的文件和子目录列表
# 如果是POSIX系统并且当前目录是根目录,则排除"proc"和"sys"这两个特殊目录
if path == "/" and os.name == "posix":
file_list.remove("proc")
file_list.remove("sys")
except PermissionError:
print(f"无权限查看此目录:{path}")
return False
# 遍历目录下的文件和子目录
for file_name in file_list:
# 拼接文件或子目录的完整路径
fn = os.path.join(path, file_name)
# 如果文件名中包含关键字,则将该文件路径添加到符合条件的文件列表中
if keywork in file_name:
data_list.append(fn)
# 如果是一个子目录,则递归调用find_file函数继续查找
if os.path.isdir(fn):
find_file(fn)
# 将所有遍历过的文件或子目录路径添加到总列表中
all_list.append(fn)
# 调用递归查找函数,开始查找文件
find_file(path=path)
# 将符合条件的文件路径写入到指定的数据文件中
with open(datafile, 'w', encoding='utf-8') as f:
for i in data_list:
f.write(i + '\n')
# 输出查找结果统计信息
text = f'''
查找完毕:
共查找文件 {len(all_list)}个
符合条件 {len(data_list)}个
符合条件的文件已记录在{datafile}文件中
'''
print(text)