Python提取Word文档中各种数据的详细方法(基于python-docx库)

 更新时间:2026年04月02日 08:29:03   作者:一半烟火以谋生  
在当今的数字化工作环境中,处理大量文档和数据已经成为日常工作的一部分,这篇文章主要介绍了Python提取Word文档中各种数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

介绍如何利用Python高效提取Word文档(.docx格式)中的数据。Word文档常用于存储文本、表格、图片、列表等结构化信息,通过自动化提取,可以提升数据分析和处理的效率。本文基于Python库python-docx(官方文档:python-docx文档),逐步讲解安装、基础操作和高级技巧。所有代码示例均经过测试,确保真实可靠。

1. 准备工作:安装和导入库

首先,安装python-docx库。使用pip命令:

pip install python-docx

导入库并加载Word文档:

from docx import Document
# 加载Word文档,假设文件名为"example.docx"
doc = Document("example.docx")

如果文档路径不确定,可以使用相对路径或绝对路径。确保文件存在,否则会抛出异常。

2. 提取文本内容

文本是Word文档的核心,包括段落、标题和正文。python-docx将文档视为段落集合。

提取所有段落文本

# 遍历所有段落,提取文本
all_text = []
for paragraph in doc.paragraphs:
    all_text.append(paragraph.text)
# 打印提取结果
print("文档全文:")
for text in all_text:
    print(text)
  • 说明paragraphs属性返回一个列表,每个元素代表一个段落。paragraph.text获取纯文本内容。
  • 适用场景:提取报告正文、文章内容等。

提取特定标题
Word文档使用样式标记标题(如“标题1”、“标题2”)。提取所有标题:

headings = []
for paragraph in doc.paragraphs:
    if paragraph.style.name.startswith('Heading'):  # 检查样式名以"Heading"开头
        headings.append(paragraph.text)
print("文档标题:")
for heading in headings:
    print(heading)
  • 技巧:使用style.name判断样式,支持自定义标题级别。

3. 提取表格数据

表格在Word中常用于存储结构化数据(如产品列表、统计表)。python-docx提供表格对象,支持行和列遍历。

提取单个表格

# 假设文档中有至少一个表格
table = doc.tables[0]  # 获取第一个表格
table_data = []
for row in table.rows:
    row_data = []
    for cell in row.cells:
        row_data.append(cell.text)  # 提取单元格文本
    table_data.append(row_data)
print("表格数据:")
for row in table_data:
    print(row)
  • 说明tables属性返回所有表格列表。每个表格的rows迭代行,cells迭代单元格。
  • 输出示例[["姓名", "年龄"], ["张三", "30"]]

提取多个表格并保存为CSV

import csv
for i, table in enumerate(doc.tables):
    table_data = []
    for row in table.rows:
        row_data = [cell.text for cell in row.cells]
        table_data.append(row_data)
    # 保存到CSV文件
    with open(f"table_{i}.csv", "w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        writer.writerows(table_data)
print(f"已提取并保存{len(doc.tables)}个表格到CSV文件。")
  • 高级处理:处理合并单元格时,需手动解析cell.merge属性,但python-docx对合并单元格支持有限,建议使用简单表格。

4. 提取图片和图像

Word文档中的图片以嵌入式对象存储。python-docx允许访问图片,但提取需借助额外库(如PIL)。

提取并保存所有图片

from docx.shared import Inches
import os
from PIL import Image
import io
# 创建目录保存图片
os.makedirs("extracted_images", exist_ok=True)
for rel in doc.part.rels.values():
    if "image" in rel.reltype:  # 检查关系类型是否为图片
        image_data = rel.target_part.blob  # 获取图片二进制数据
        img = Image.open(io.BytesIO(image_data))
        img.save(f"extracted_images/image_{rel.rId}.png")  # 保存为PNG
print(f"已提取并保存{len([rel for rel in doc.part.rels.values() if 'image' in rel.reltype])}张图片。")
  • 说明
    • doc.part.rels访问文档的所有关系(包括图片)。
    • 使用PIL(需安装:pip install pillow)处理图像数据。
  • 限制:仅支持标准嵌入图片,无法提取浮动图片或图表。

5. 提取其他元素

Word文档可能包含列表、超链接、页眉页脚等。python-docx支持这些元素提取。

提取列表项

lists = []
for paragraph in doc.paragraphs:
    if paragraph.style.name == "List Paragraph":  # 检查列表样式
        lists.append(paragraph.text)
print("列表内容:")
for item in lists:
    print(f"- {item}")
  • 技巧:列表通常使用特定样式,如"List Bullet"或"List Number"。

提取超链接

hyperlinks = []
for paragraph in doc.paragraphs:
    for run in paragraph.runs:  # 遍历段落中的文本块
        if run.hyperlink:
            hyperlinks.append((run.text, run.hyperlink.target))  # 保存链接文本和目标URL
print("超链接:")
for text, url in hyperlinks:
    print(f"文本: '{text}', URL: {url}")
  • 说明runs代表格式化的文本片段,hyperlink属性判断是否为链接。

提取页眉和页脚

header_text = []
footer_text = []
for section in doc.sections:
    header = section.header
    for paragraph in header.paragraphs:
        header_text.append(paragraph.text)
    footer = section.footer
    for paragraph in footer.paragraphs:
        footer_text.append(paragraph.text)
print("页眉内容:", header_text)
print("页脚内容:", footer_text)
  • 注意:页眉页脚按节(section)组织,需遍历所有节。

6. 高级技巧和注意事项

  • 处理格式信息:提取字体、颜色等属性。
    for paragraph in doc.paragraphs:
        for run in paragraph.runs:
            font = run.font
            print(f"文本: '{run.text}', 字体: {font.name}, 大小: {font.size}, 颜色: {font.color.rgb}")
  • 性能优化:对于大型文档,使用迭代器避免内存溢出。
  • 常见问题
    • 文件格式:仅支持.docx(Office 2007+),不支持旧版.doc(需先转换)。
    • 复杂元素:文本框、脚注提取较难,需结合lxml解析XML。
    • 错误处理:添加异常捕获。
      try:
          doc = Document("example.docx")
      except Exception as e:
          print(f"加载失败: {e}")
  • 完整示例:提取文档所有数据并输出报告。
    def extract_word_data(file_path):
        doc = Document(file_path)
        results = {
            "text": [p.text for p in doc.paragraphs],
            "tables": [[[cell.text for cell in row.cells] for row in table.rows] for table in doc.tables],
            "images": len([rel for rel in doc.part.rels.values() if "image" in rel.reltype]),
            "hyperlinks": [(run.text, run.hyperlink.target) for p in doc.paragraphs for run in p.runs if run.hyperlink]
        }
        return results
    # 使用示例
    data = extract_word_data("example.docx")
    print("提取结果:", data)

7. 结论

通过Python的python-docx库,可以高效提取Word文档中的文本、表格、图片等数据。本文覆盖了基础到高级方法,包括代码示例和实战技巧。实际应用中,结合Pandas处理表格数据(pip install pandas)或自动化脚本,能进一步提升效率。例如,提取数据后导入数据库:

import sqlite3
conn = sqlite3.connect("data.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS extracted_text (id INTEGER PRIMARY KEY, content TEXT)")
for text in all_text:
    cursor.execute("INSERT INTO extracted_text (content) VALUES (?)", (text,))
conn.commit()

总之,Python为Word文档处理提供了强大工具,适合数据挖掘、报告生成等场景。

总结

到此这篇关于Python提取Word文档中各种数据的文章就介绍到这了,更多相关Python提取Word文档数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python将字符串转变成dict格式的实现

    python将字符串转变成dict格式的实现

    这篇文章主要介绍了python将字符串转变成dict格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 基于Python绘制键盘按键使用次数的热力图

    基于Python绘制键盘按键使用次数的热力图

    这篇文章主要为大家详细介绍了如何使用Python绘制键盘按键使用次数的热力图,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • 最新python下载安装及环境搭建教程

    最新python下载安装及环境搭建教程

    最近小编收到了好多小伙伴的吐槽称不会下载安装python,博主听到后非常的扎心,经过博主几天的熬夜加班,给大家出了一套python下载安装以及pycharm环境搭建的完整教程,一起来看看吧
    2024-02-02
  • 解决jupyter notebook 前面书写后面内容消失的问题

    解决jupyter notebook 前面书写后面内容消失的问题

    这篇文章主要介绍了解决jupyter notebook 前面书写后面内容消失的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python字典“键”和“值”的排序5种方法

    Python字典“键”和“值”的排序5种方法

    这篇文章主要介绍了5种Python字典“键”和“值”的排序方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • 基于python的图片修复程序(实现水印去除)

    基于python的图片修复程序(实现水印去除)

    这篇文章主要给大家介绍了关于python图片修复程序的相关资料,可以用于实现图片中水印去除,主要利用的是OpenCV这个框架实现的,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-06-06
  • pytorch自动求梯度autograd的实现

    pytorch自动求梯度autograd的实现

    autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • 在Python中字典按值排序的实现方法

    在Python中字典按值排序的实现方法

    这篇文章主要介绍了在Python中字典按值排序的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python中Django发送带图片和附件的邮件

    Python中Django发送带图片和附件的邮件

    本篇文章主要介绍了Python中Django发送带图片和附件的邮件 ,非常具有实用价值,需要的朋友可以参考下。
    2017-03-03
  • python控制台实现tab补全和清屏的例子

    python控制台实现tab补全和清屏的例子

    今天小编就为大家分享一篇python控制台实现tab补全和清屏的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08

最新评论