You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:03:50