Python从Word提取邮箱返回空值,表格内邮箱未提取如何解决?
问题原因与解决方案
核心问题
你的代码只提取了Word文档中的普通段落文本,完全没有处理文档内的表格内容。wordDoc.paragraphs仅包含文档里的常规段落,表格单元格中的内容不会被这个属性捕获,所以邮箱自然不会出现在documentText里。
修改后的代码
import pandas as pd from docx import Document import os import re os.chdir('C:\\Users\\user1\\test') path = 'C:\\Users\\user1\\test' output_path = 'C:\\Users\\user1\\test1' writer = pd.ExcelWriter('{}/docx_emails.xlsx'.format(output_path), engine='xlsxwriter') data = [] # 优化后的邮箱正则,覆盖更多合法格式 regex = re.compile(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}') for filename in os.listdir(path): # 仅处理docx格式文件,避免无效文件干扰 if not filename.endswith('.docx'): continue wordDoc = Document(os.path.join(path, filename)) documentText = [] # 提取普通段落文本 for p in wordDoc.paragraphs: documentText.append(p.text) # 提取表格内所有单元格的文本 for table in wordDoc.tables: for row in table.rows: for cell in row.cells: documentText.append(cell.text) # 合并文本并匹配邮箱,同时去重 full_text = '\n'.join(documentText) matches = regex.findall(full_text) unique_matches = list(set(matches)) data.append(unique_matches) df = pd.DataFrame(data) df.to_excel(writer) writer.save() print(df)
关键修改说明
- 新增表格遍历逻辑:通过
wordDoc.tables获取所有表格,逐层遍历行和单元格,将单元格文本纳入提取范围 - 增加文件格式过滤:只处理
.docx后缀的文件,避免读取非Word文件引发错误 - 优化正则表达式:更贴合RFC标准的邮箱格式,减少漏匹配情况
- 结果去重:用集合去重同一文档内的重复邮箱,避免数据冗余
额外验证点
如果修改后仍未提取到邮箱,可做以下检查:
- 确认目标Word文档中的邮箱是纯文本格式,而非图片或嵌入对象(图片中的邮箱需要OCR识别,当前代码无法处理)
- 打印
full_text变量,查看是否包含邮箱内容,排查是否为正则表达式的匹配问题
内容的提问来源于stack exchange,提问作者AJenkins
相关产品推荐
相关产品推荐

