- 代码
涉及函数功能:
- 返回指定文件夹下所有指定类型(代码以txt实例)的文件,递归查找
- 根据给定的字符串(支持正则表达式),返回在所有txt文件中查找包含所给字符串的行
- 将结果存放在xlsx文件中,第一列是文件路径,第二列是返回的行,匹配不上则为空
from tkinter import *
from tkinter import filedialog
import re
import os
import datetime
import xlwt
import time
file_dir = 'ini'
root = Tk()
root.geometry('480x270')
file_dir_var = StringVar() # entry组件1的文本变量
# root.withdraw() #将Tk()实例隐藏,不然有个小框
# filepath=filedialog.askopenfilename (initialdir=r"C:\Users") #askopenfilename,打开文件
# filepath=filedialog .askdirectory(initialdir=r"C:\Users") #askdirectory,打开文件夹
# print (filepath)
def start_find(): # 查找主函数
dst_str.set
# 必须要这句,不然dst_str没值
print('待查找的字符串值是:%s ' % dst_str.get()) # 输出待香找的字符串
dst_str_tmp = dst_str.get()
print('待查找的文件路径是:%s' % file_dir_var.get()) # 输出待查找的文件夹路径
file_dir = file_dir_var.get()
listdir(file_dir, txtlist_name) # 调用1istdir函数,得到txt文件路径
Dest_text = ''
workbook = xlwt.Workbook(encoding="utf-8") # 新建表格,作为最终输出
worksheet = workbook.add_sheet('查找结果统计') # 新建名为PCF 上DNN配置统计的sheet页
worksheet.write(0, 0, '文件名') # 第一行第一列标题
worksheet.write(0, 1, '匹配上的配置') # 第 一行第二列标题
col = 1 # excel的行,第一行是标题,从第二行开始
row = 0 # excel的列
for filedir1 in txtlist_name:
file = open(filedir1, encoding='utf-8') # 批x文件以GBK编码,需转换成Python识别的utf-8编码
NoneFlag = True # 配置是否为空的标志位,每个文件开始前重置
for line in file: # 单个文件中,按行遍历
temp = re.findall(dst_str_tmp, line)
# re.finda11两数查找1ine宁符串中符合条件的所有目标字符串
# 打印找到包含字符串的所在的行
if temp:
NoneFlag = False # 有配置,标志位置为False
Dest_text = Dest_text + line
worksheet.write(col, row, filedir1) # 写入打开的配置文件名
worksheet.write(col, row + 1, line) # 找到的行作为字符串写入表格
col += 1 # 行加1,下次写在下一列
if NoneFlag:
worksheet.write(col, row, filedir1) # 单个文件检查完,判断是否没有配置
worksheet.write(col, row + 1, '') # 写入打开的配置文件名
file.close()
workbook.save(savefile())
print('保存xlsx文件成功')
def savefile():
result_filename_ = filedialog.asksaveasfilename(defaultextension='.xlsx') # 保存文件,返回文件名,
result_filename.set(result_filename_)
return result_filename.get() # result_filemame是字符串变量,返回get函数扌是宇符串
def select_dir_click():
file_dir_var_ = filedialog.askdirectory(initialdir=r'C:')
file_dir_var.set(file_dir_var_)
file_dir = file_dir_var.get()
print('执行点击选择目录后file_dir值:', file_dir)
return file_dir
def listdir(path, list_name): # 获取txt文件名的西数,传入参数为文件夹路径,空列表,返回用于存储文
# 获取当前目录及子目录下文件
for file in os.listdir(path): # 返回指定文件路径下的文件夹和文件名的列表
file_path = os.path.join(path, file) # file_prth是文件路径和文件名的拼接,文件夹的
if os.path.isdir(file_path): # 判断file prth是不是文件夹,是文件夹就递归向
listdir(file_path, list_name)
elif os.path.splitext(file_path)[1] == '.txt': # 如果是文件,判断是不是txt文件
list_name.append(file_path)
txtlist_name = [] # 存放txt文件名的刎表
group = LabelFrame(root)
group.pack(padx=10, pady=20)
label1 = Label(group, text='目标文件夹:').grid(row=0, column=0)
label2 = Label(group, text='查找的字符串').grid(row=1, column=0)
label3 = Label(group, text='查找结果保存路径:').grid(row=2, column=0)
e1 = Entry(group, textvariable=file_dir_var, width=30) # 显示选择后的目录,width为输入框长度,
e1.grid(row=0, column=1)
dst_str = StringVar() # entry组件2的文本变量
e2 = Entry(group, textvariable=dst_str, width=30) # 待输入目标字符串
e2.grid(row=1, column=1)
result_filename = StringVar()
e3 = Entry(group, width=30, textvariable=result_filename)
e3.grid(row=2, column=1)
bu1 = Button(group, text='选择目录', command=select_dir_click)
bu1.grid(row=0, column=2, sticky=W)
bu2 = Button(group, text='开始杳找', command=start_find)
bu2.grid(row=3, column=1, sticky=W)
mainloop()
- 效果

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程