如何用Python提取Word/PDF中‘results’后的指定表格?
解决方案:定位“results”后提取目标表格
针对PDF文件的处理方法
结合文本定位+表格提取:用
PyMuPDF(fitz)先定位“results”的位置,再配合Camelot提取该位置之后的表格
步骤:- 用PyMuPDF遍历PDF每页,搜索“results”关键词,记录匹配页面和文本的纵坐标(y坐标)
- 对目标页面,用Camelot提取所有表格,对比表格顶部的y坐标是否大于“results”文本的y坐标,筛选符合条件的表格
- 封装逻辑成函数,批量遍历所有PDF文件
示例代码片段:
import fitz from camelot import read_pdf def extract_results_table(pdf_path): doc = fitz.open(pdf_path) target_pages = [] for page_num in range(len(doc)): page = doc.load_page(page_num) text_instances = page.search_for("results") if text_instances: rect = text_instances[0] target_pages.append((page_num+1, rect.y1)) # Camelot页码从1开始 doc.close() tables = [] for page_num, y_pos in target_pages: page_tables = read_pdf(pdf_path, pages=str(page_num), flavor='lattice') for table in page_tables: table_y = table._bbox[1] if table_y > y_pos: tables.append(table.df) return tables
针对Word(docx)文件的处理方法
用
python-docx定位“results”文本位置,再提取后续表格
步骤:- 遍历docx文档的所有元素(段落+表格),找到包含“results”的段落
- 从该段落的下一个元素开始,提取所有表格(若仅需第一个,提取后直接终止)
示例代码片段:
from docx import Document def extract_docx_results_table(docx_path): doc = Document(docx_path) target_tables = [] all_elements = list(doc.element.body) for idx, elem in enumerate(all_elements): if elem.tag.endswith('p'): para_text = elem.text or "" if "results" in para_text.lower(): for elem_after in all_elements[idx+1:]: if elem_after.tag.endswith('tbl'): table_idx = all_elements.index(elem_after) table = doc.tables[table_idx] df = [[cell.text for cell in row.cells] for row in table.rows] target_tables.append(df) # 仅需第一个表格的话,取消下面注释 # break break return target_tables
批量处理注意事项
- 统一文件目录:将所有PDF/docx文件放在同一文件夹,用
os模块遍历文件路径 - 异常处理:添加
try-except块,处理损坏文件、无“results”匹配的文件等情况 - 结果存储:将提取的表格保存为CSV或Excel格式,便于后续分析
内容的提问来源于stack exchange,提问作者Romh
相关产品推荐
相关产品推荐

