Python之txt数据预定替换word预定义定位标记生成word报告(一)
一、需求描述
1. 项目背景:在系统运维过程中,需要对多个服务器的系统信息进行检查并生成报告。现有一系列以特定格式命名的TXT文件存储检查日志(该日志来之linux系统以命令检查uptime、ntp、cpu、memory、net等运行情况),以及一个Word模板用于生成最终报告,需要开发一个工具将TXT文件中的数据准确填充到Word模板的指定位置,生成完整的系统平台报告。
2. 功能需求
– 从TXT文件存储目录中读取所有相关TXT文件。
– 从文件名中提取IP地址,并验证文件名格式是否正确。
– 解析TXT文件内容,按照预定义的检查项标记提取相应的数据。
– 分析Word模板,识别指定范围内表格中的IP地址和定位标记位置,并建立IP - 表格 - 标记的映射关系。
– 根据建立的映射关系,将TXT文件中提取的数据精准填充到Word模板对应表格的指定位置。
– 生成最终的Word报告并保存到指定路径。
3. 输入输出要求
– 输入:TXT文件存储目录路径、Word模板路径、输出报告路径,以及预定义的检查项配置。
– 输出:一个填充好数据的Word格式系统平台报告。
该需求通过5章python代码来实现。
二、pthon代码--全局配置部分
import os
import re
import time
from docx import Document
from collections import OrderedDict, defaultdict
# ================== 全局配置 ==================
CHECK_TIME = time.strftime('%Y-%m-%d')
TXT_DIR = r"D:\xunjian\check_log\checkOS"
TEMPLATE_PATH = r"D:\xunjian\系统平台模板.docx"
OUTPUT_PATH = r"D:\xunjian\系统平台报告_已生成-" + str(CHECK_TIME) + ".docx"
# 检查项配置(完整6个标记,有序字典保证处理顺序)
CHECK_BLOCKS = OrderedDict([
("##UPTIME##", (r"^---check uptime$", r"^---check ntp$")),
("##NTP##", (r"^---check ntp$", r"^---check cpu$")),
("##CPU_USAGE##", (r"^---check cpu$", r"^---check memory$")),
("##MEMORY_USAGE##", (r"^---check memory$", r"^---check IO$")),
("##NET_USAGE##", (r"^---check IO$", r"^---check disk$")),
("##FILESYSTEM_USAGE##", (r"^---check disk$", r"^---check end$"))
])
- **导入模块**:`os`用于操作系统相关操作,`re`用于正则表达式处理,`time`用于获取时间,`Document`从`docx`库中导入用于操作Word文档,`OrderedDict`和`defaultdict`从`collections`库中导入用于处理有序字典和默认值字典。
- **定义全局变量**
- `CHECK_TIME`:获取当前日期,格式为`YYYY - MM - DD`,用于生成输出报告的文件名。
- `TXT_DIR`:TXT文件存储目录路径。
- `TEMPLATE_PATH`:Word模板文件路径。
- `OUTPUT_PATH`:输出报告的路径,文件名包含当前日期。
- `CHECK_BLOCKS`:一个有序字典,定义了检查项标记及其对应的起始和结束正则表达式模式,用于从TXT文件中提取数据。