如何使用Python从Word申请表提取字段数据至DataFrame
从Word申请表提取字段到Python DataFrame的实现方案
适用库推荐
python-docx:专门处理.docx格式Word文档,能读取文本、内容控件等元素pandas:用于创建和操作DataFrame,是处理结构化数据的必备工具
先执行安装命令:
pip install python-docx pandas
情况1:结构化Word表单(带内容控件)
如果申请表是用Word内置的内容控件(文本框、下拉选择框等)制作的,直接读取控件值即可,这种方式最准确。
代码实现
import docx import pandas as pd def extract_structured_form(doc_path): doc = docx.Document(doc_path) form_data = {} # 遍历所有内容控件,匹配目标字段 for control in doc.content_control_elements: target_fields = ["Name", "Designation", "Annual Salary"] if control.title in target_fields: form_data[control.title] = control.text # 转换为DataFrame return pd.DataFrame([form_data]) # 调用示例 result_df = extract_structured_form("application_form.docx") print(result_df) # 通过字段键调用值:print(result_df["Name"][0])
情况2:普通文本格式申请表
如果申请表是纯文本排版(比如字段和值以字段名: 内容的形式存在,例如Name: John Doe),可以用正则表达式匹配提取。
代码实现
import docx import pandas as pd import re def extract_text_based_form(doc_path): doc = docx.Document(doc_path) # 提取文档所有文本 full_text = "\n".join([para.text for para in doc.paragraphs]) # 定义字段匹配规则,根据你的表单格式调整 field_rules = { "Name": r"Name:\s*(.*)", "Designation": r"Designation:\s*(.*)", "Annual Salary": r"Annual Salary:\s*(.*)" } form_data = {} for field, pattern in field_rules.items(): match = re.search(pattern, full_text) form_data[field] = match.group(1).strip() if match else None # 转换为DataFrame return pd.DataFrame([form_data]) # 调用示例 result_df = extract_text_based_form("application_form.docx") print(result_df) # 调用字段值:print(result_df["Annual Salary"][0])
额外注意事项
- 若你处理的是旧版
.doc格式文档,python-docx不支持,建议先将文件批量转成.docx格式,或在Windows环境下使用pywin32库处理 - 正则表达式需根据表单实际排版调整,比如中文表单可能用全角冒号
:,要对应修改规则里的符号 - 若需处理多个申请表,可循环遍历文件列表,将每个表单的数据存入列表,最后统一转换为DataFrame
内容的提问来源于stack exchange,提问作者user15904369
相关产品推荐
相关产品推荐

