达永编程网

程序员技术分享与交流平台

Python之txt数据预定替换word预定义定位标记生成word报告(二)

接着Python之txt数据预定替换word预定义定位标记生成word报告(一)【
https://mp.toutiao.com/profile_v4/graphic/preview?pgc_id=7482354347595088424】,补充python第二部分。

python如下:

模板解析模块 - TemplateAnalyzer类

class TemplateAnalyzer:
    """Word模板解析引擎,负责:
    1. 识别指定范围内的表格
    2. 提取IP地址和定位标记位置
    3. 建立IP-表格-标记的映射关系
    """
    def __init__(self):
        self.doc = Document(TEMPLATE_PATH)
        # 三级字典结构:IP -> 表格索引 -> 标记 -> 位置列表
        self.table_map = defaultdict(lambda: defaultdict(dict))

    def _extract_markers(self, table, table_idx):
        """提取单个表格中的定位标记坐标
        :param table: 表格对象
        :param table_idx: 表格索引(0-based)
        :return: 标记位置字典 {标记: [(行,列),...]}
        """
        marker_positions = defaultdict(list)
        for row_idx, row in enumerate(table.rows):
            for cell_idx, cell in enumerate(row.cells):
                cell_text = cell.text.strip()
                for marker in CHECK_BLOCKS.keys():
                    if marker in cell_text:
                        marker_positions[marker].append((row_idx, cell_idx))
                        print(f"发现标记:{marker} @表格{table_idx + 1}行{row_idx + 1}列{cell_idx + 1}")
        return marker_positions

    def analyze(self, start_table=7, end_table=33):
        """核心分析方法
        :param start_table: 起始表格编号(Word中可见编号)
        :param end_table: 结束表格编号
        :return: 三级映射字典
        """
        print(" 开始深度分析模板结构...")
        start_idx = start_table - 1
        end_idx = end_table - 1

        for idx in range(start_idx, end_idx + 1):
            if idx >= len(self.doc.tables):
                print(f"[WARN] 表格{idx+1}不存在,跳过")
                break

            table = self.doc.tables[idx]
            print(f"\n分析表格{idx + 1}:")

            ip_list = []
            for row in table.rows[:10]:
                for cell in row.cells:
                    ips = re.findall(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b", cell.text)
                    ip_list.extend(ips)

            marker_data = self._extract_markers(table, idx)

            for ip in set(ip_list):
                for marker, positions in marker_data.items():
                    if positions:
                        self.table_map[ip][idx][marker] = positions
                        print(f"记录IP[{ip}]的{marker}位置")

        return self.table_map
- **类定义**:`TemplateAnalyzer`类用于分析Word模板。
- **构造函数`__init__`**:加载Word模板文件,并初始化一个用于存储IP - 表格 - 标记映射关系的三级字典。
- **`_extract_markers`方法**:在单个表格中查找所有预定义标记的位置,并返回一个字典,键为标记,值为标记所在的单元格坐标列表。
- **`analyze`方法**:核心分析方法,遍历指定范围内的表格。首先提取表格前10行中的IP地址,然后提取表格中的标记位置,最后建立IP - 表格 - 标记的映射关系并返回。
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言