Python实现Word文档中提取表格数据并转换为CSV和JSON格式

 更新时间:2025年12月18日 08:51:24   作者:Quest for Knowledge  
在日常工作中,我们经常需要处理大量的Word文档,其中包含各种表格数据,手动整理这些表格不仅耗时且容易出错,Python提供了多个库来帮助我们实现这一目标,所以本文给大家介绍了Python实现Word文档中提取表格数据并转换为CSV和JSON格式,需要的朋友可以参考下

前言

在日常工作中,我们经常需要处理大量的Word文档,其中包含各种表格数据。手动整理这些表格不仅耗时且容易出错。因此,开发一个自动化工具来解析Word文档中的表格,并将其转换为更易于处理的CSV或JSON格式,可以极大地提高工作效率。

1.解析Word文档中的表格

Python提供了多个库来帮助我们实现这一目标,其中python-docx库非常适合读取Word文档(.docx)的内容。下面的代码示例展示了一个名为extract_tables_from_docx的函数,该函数接收一个Word文档的路径作为输入,然后解析文档中的所有表格,并将每个表格的数据以嵌套列表的形式返回。

首先导入必要的库

import os
import csv
import json
from docx import Document
from collections import defaultdict
from lxml import etree
def extract_tables_from_docx(docx_path):
    doc = Document(docx_path)
    all_tables_data = []

    for table in doc.tables:
        table_data = []
        merged_cells = defaultdict(str)
        row_spans = defaultdict(lambda: 0)
        for i, row in enumerate(table.rows):
            row_data = []
            for j, cell in enumerate(row.cells):
                cell_text = cell.text.strip()
                cell_xml = etree.fromstring(cell._element.xml)

                nsmap = {'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'}
                grid_span = cell_xml.xpath(".//w:gridSpan/@w:val", namespaces=nsmap)
                if grid_span:
                    span = int(grid_span[0])
                    for k in range(span):
                        if k == 0:
                            row_data.append(cell_text)
                        else:
                            merged_cells[(i, j + k)] = cell_text
                else:
                    row_data.append(cell_text)

                v_merge = cell_xml.xpath(".//w:vMerge/@w:val", namespaces=nsmap)
                if v_merge:
                    if v_merge[0] == 'restart':
                        row_spans[(i, j)] = 1
                        merged_cells[(i, j)] = cell_text
                    elif v_merge[0] is None:
                        row_spans[(i, j)] += 1
                        row_data[-1] = merged_cells[(i - row_spans[(i, j)], j)]

            table_data.append(row_data)
        all_tables_data.append(table_data)

    return all_tables_data

该函数使用了lxml库来解析XML,因为.docx文件本质上是ZIP压缩包,其中包含了用于描述文档结构的XML文件。lxml库允许通过XPath查询来访问这些XML元素,从而处理单元格的合并和跨度。

2.保存表格数据

一旦表格数据被提取出来,就可以将其保存为CSV或JSON格式。为此,定义了两个辅助函数save_tables_to_csv和save_tables_to_json,它们分别负责将表格数据写入CSV文件和JSON文件。

def save_tables_to_csv(tables, output_dir, file_name):
    for i, table in enumerate(tables):
        csv_path = os.path.join(output_dir, f"{file_name}_table_{i+1}.csv")
        with open(csv_path, mode='w', newline='', encoding='utf-8') as file:
            writer = csv.writer(file)
            writer.writerows(table)
        print(f"表格 {i+1} 已保存为 CSV 文件,路径为 {csv_path}")

def save_tables_to_json(tables, output_dir, file_name):
    for i, table in enumerate(tables):
        json_path = os.path.join(output_dir, f"{file_name}_table_{i+1}.json")
        with open(json_path, mode='w', encoding='utf-8') as file:
            json.dump(table, file, ensure_ascii=False, indent=4)
        print(f"表格 {i+1} 已保存为 JSON 文件,路径为 {json_path}")

3.处理文件夹中的多个Word文档

为了批量处理文件夹中的多个Word文档,我们可以使用os.listdir和列表推导式来获取所有.doc或.docx文件的列表。然后,对于列表中的每个文件,我们调用上述函数来提取表格并保存结果。

# 设置文件路径和输出目录
docx_path = r'E:\data\\测试表格'
output_dir = r'E:\data\\测试表格'

# 获取文件夹中所有 Word 文件的列表
word_files = [f for f in os.listdir(docx_path) if f.endswith('.doc') or f.endswith('.docx')]


# 提取表格数据并保存为 CSV 和 JSON 文件
for file in word_files:
    file_path = os.path.join(docx_path, file)
    tables = extract_tables_from_docx(file_path)
    file_name = os.path.splitext(file)[0]
    save_tables_to_csv(tables, output_dir, file_name)
    save_tables_to_json(tables, output_dir, file_name)

4.总结

通过这个脚本,可以轻松地从Word文档中提取表格数据,并将其转换为CSV或JSON格式,从而方便进一步的数据分析或导入到数据库中。节省了手动数据录入的时间,还减少了人为错误的可能性,提高了数据处理的效率和准确性。

以上就是Python实现Word文档中提取表格数据并转换为CSV和JSON格式的详细内容,更多关于Python Word数据提取并转为CSV和JSON的资料请关注脚本之家其它相关文章!

相关文章

  • Python用 matplotlib 绘制柱状图

    Python用 matplotlib 绘制柱状图

    这篇文章主要介绍了Python如何用 matplotlib 绘制柱状图,文章对matplotlib模块中详细学习绘制各种柱状图标相关属性和方法,在遇到需要直观展示离散数据点的差异时,我们可以使用bar()或者barh()绘制美观的图表。具有一定的参考价值,需要的朋友可以参考一下
    2021-12-12
  • python爬虫入门教程之糗百图片爬虫代码分享

    python爬虫入门教程之糗百图片爬虫代码分享

    这篇文章主要介绍了python爬虫入门教程之糗百图片爬虫代码分享,本文以抓取糗事百科内涵图为需求写了一个爬虫,,需要的朋友可以参考下
    2014-09-09
  • matplotlib subplots 设置总图的标题方法

    matplotlib subplots 设置总图的标题方法

    今天小编就为大家分享一篇matplotlib subplots 设置总图的标题方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 一步步解析Python斗牛游戏的概率

    一步步解析Python斗牛游戏的概率

    这篇文章主要带着大家一步步解析Python斗牛游戏的概率,计算出斗牛游戏的概率,感兴趣的朋友可以参考一下
    2016-02-02
  • Python结合FastSAM实现图像自动标注的完整指南

    Python结合FastSAM实现图像自动标注的完整指南

    FastSAM是SAM的加速版本,能够在保持较高精度的同时大幅提升处理速度,本文将详细解析Python结合FastSAM实现图像自动标注的代码结构、实现原理和使用方法,帮助读者快速掌握图像自动标注的核心技术
    2025-10-10
  • 使用python将请求的requests headers参数格式化方法

    使用python将请求的requests headers参数格式化方法

    今天小编就为大家分享一篇使用python将请求的requests headers参数格式化方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python使用wxPython实现计算器

    Python使用wxPython实现计算器

    这篇文章主要为大家详细介绍了Python使用wxPython实现计算器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Python使用生成器轻松处理海量数据

    Python使用生成器轻松处理海量数据

    不知道大家有没有处理过海量数据,就是数据量非常庞大的时候,如何处理,本文小编就来和大家聊聊Python如何使用生成器轻松处理海量数据吧
    2025-09-09
  • Python脚本实时处理log文件的方法

    Python脚本实时处理log文件的方法

    Python脚本是用来对实时文件的内容监控。接下来通过本文给大家介绍Python脚本实时处理log文件的方法,需要的朋友参考下吧
    2016-11-11
  • 如何用Python写一个简单的通讯录

    如何用Python写一个简单的通讯录

    这篇文章主要介绍了如何用Python写一个简单的通讯录,对着几串代码感兴趣的朋友一起来看看吧
    2021-08-08

最新评论