如何用python-docx正确读取Word文档中的嵌套表格数据?
解决python-docx读取嵌套Word表格时文本重复的问题
问题出在docfile.tables会返回文档中所有层级的表格,包括嵌套在其他表格单元格里的子表格。你的原代码先遍历顶层表格读取单元格文本,接着又会遍历到子表格再次读取其中内容,再加上Word单元格可能存在的重复段落结构,最终导致文本大量重复。
正确的嵌套表格数据提取方案
用递归方式遍历表格,先提取当前单元格的文本,再深入处理单元格内的嵌套表格,确保每个层级的内容只被提取一次:
from docx import Document def extract_table_data(table, data_list): for row in table.rows: for cell in row.cells: # 提取当前单元格的纯文本(自动排除嵌套表格内容) clean_text = cell.text.strip() if clean_text: data_list.append(clean_text) # 递归处理单元格内的嵌套表格 for sub_table in cell.tables: extract_table_data(sub_table, data_list) # 初始化文档和数据列表 doc = Document("你的文档路径.docx") extracted_data = [] # 遍历所有顶层表格,递归提取数据 for top_table in doc.tables: extract_table_data(top_table, extracted_data) # 查看结果 print(extracted_data)
额外处理:单元格内文本重复的情况
如果单元格本身存在重复段落导致文本重复,可以先对单元格内的段落文本去重后再提取:
def extract_table_data(table, data_list): for row in table.rows: for cell in row.cells: # 提取单元格中所有非空段落文本,去重后合并 paragraph_texts = [p.text.strip() for p in cell.paragraphs if p.text.strip()] # 保持顺序的去重方式 unique_texts = list(dict.fromkeys(paragraph_texts)) if unique_texts: data_list.append('\n'.join(unique_texts)) # 递归处理嵌套表格 for sub_table in cell.tables: extract_table_data(sub_table, data_list)
内容的提问来源于stack exchange,提问作者Janzen Chien
相关产品推荐
相关产品推荐

