初测: 批量截图名称保存为:192.168.1.1.png 将其筛选提取出存在漏洞的图片 再提取图片名ip
1 2 3 4 5 6 7 8 9 10 11 12 import os picturePath = '/Users/aqi/Desktop/python/word批量化生成/pic/' # 图片文件的路径 savePath = "/Users/aqi/Desktop/python/word批量化生成/存在漏洞.txt" # 图片名提取出来后存放的路径 读取图片的名字,保存到txt文件 file_txt = open(savePath,'w') #打开文件,开始文件不存在,当运行这条语句后,会在文件夹里生成txt文件 fileName = os.listdir(picturePath) # 遍历文件夹中的图片名 for i in fileName: # 用for循环遍历文件名 if i.endswith(".png"): # 如果文件是以png结尾的 png_name = i.replace('.png', '') #替换.png为空 file_txt.write(png_name +'\n') # 加入换行符写入txt
运行结果:
然后就可以批量word生成了 先准备一个xlsx文件和一个word模板
ip.xlsx:
模板.docx:
上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from docxtpl import InlineImage from docx.shared import Mm from docxtpl import DocxTemplate import pandas as pd data = pd.read_excel('ip.xlsx') # 读取ip.xlsx url = data["IP列"] f = data["序号"] num = data.shape[0] for i in range(num) : tpl = DocxTemplate('模板.docx') context = { "f" : f[i], "url" : url[i], "pic" : InlineImage(tpl,'/Users/aqi/Desktop/python/word批量化生成/pic/' + url[i] +'.png',width=Mm(150),height=Mm(100)) } tpl.render(context) tpl.save("高危-某某系统{}渗透测试报告.docx".format(f[i])) print("第{}份报告已生成".format(f[i])) print("已全部结束")
复测: 先读取图片,搜索对应ip.xlsx的IP列进行生成报告
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 import re from docxtpl import InlineImage from docx.shared import Mm from docxtpl import DocxTemplate import pandas as pd import os data = pd.read_excel('ip.xlsx') # 读取ip.xlsx pic_folder = '/Users/aqi/Desktop/mysql/root root/pic/' # 图片文件夹路径 for filename in os.listdir(pic_folder): if filename.endswith('.png'): ip_match = re.search(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', filename) # 使用正则表达式提取 IP 地址 if ip_match: ip = ip_match.group(0) row = data[data['IP列'] == ip] if not row.empty: f = row['序号'].values[0] tpl = DocxTemplate('未修复-3306模板.docx') #tpl = DocxTemplate('已修复-3306模板.docx') context = { "f": f, "url": ip, "pic": InlineImage(tpl, os.path.join(pic_folder, filename), width=Mm(147), height=Mm(75)) } tpl.render(context) tpl.save("未修复-MySQL系统{}渗透测试复测报告.docx".format(f)) #tpl.save("已修复-MySQL系统{}渗透测试复测报告.docx".format(f)) print("IP地址为 {} 的报告已生成".format(ip)) else: print("未找到匹配 IP 地址 {} 的数据".format(ip)) else: print("无法从文件名中提取 IP 地址:{}".format(filename)) print("已全部结束")
报告分类: 1.xlsx格式:
创建一个“总”文件夹
脚本,1.xlsx,报告,“总”文件夹 放在同一文件夹下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import openpyxl import os import shutil # 加载Excel文件 xlsx_file = '1.xlsx' workbook = openpyxl.load_workbook(xlsx_file) sheet = workbook.active # 遍历每一行,根据部门和系统名称移动对应的docx文件 for row in sheet.iter_rows(min_row=2, values_only=True): # 从第二行开始读取数据 department = row[0] system_name = row[1] # 根据部门创建文件夹 department_folder = os.path.join('总', department) os.makedirs(department_folder, exist_ok=True) # 查找对应的docx文件 docx_file1 = f'未修复-{system_name}渗透测试复测报告.docx' docx_file2 = f'已修复-{system_name}渗透测试复测报告.docx' docx_file3 = f'高危-{system_name}渗透测试报告.docx' if os.path.exists(docx_file1): shutil.move(docx_file1, department_folder) if os.path.exists(docx_file2): shutil.move(docx_file2, department_folder) if os.path.exists(docx_file3): shutil.move(docx_file3, department_folder) workbook.save(xlsx_file) # 保存Excel文件