最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)Word文檔中提取表格數(shù)據(jù)并轉(zhuǎn)換為CSV和JSON格式

 更新時(shí)間:2025年12月18日 08:51:24   作者:Quest for Knowledge  
在日常工作中,我們經(jīng)常需要處理大量的Word文檔,其中包含各種表格數(shù)據(jù),手動(dòng)整理這些表格不僅耗時(shí)且容易出錯(cuò),Python提供了多個(gè)庫(kù)來(lái)幫助我們實(shí)現(xiàn)這一目標(biāo),所以本文給大家介紹了Python實(shí)現(xiàn)Word文檔中提取表格數(shù)據(jù)并轉(zhuǎn)換為CSV和JSON格式,需要的朋友可以參考下

前言

在日常工作中,我們經(jīng)常需要處理大量的Word文檔,其中包含各種表格數(shù)據(jù)。手動(dòng)整理這些表格不僅耗時(shí)且容易出錯(cuò)。因此,開發(fā)一個(gè)自動(dòng)化工具來(lái)解析Word文檔中的表格,并將其轉(zhuǎn)換為更易于處理的CSV或JSON格式,可以極大地提高工作效率。

1.解析Word文檔中的表格

Python提供了多個(gè)庫(kù)來(lái)幫助我們實(shí)現(xiàn)這一目標(biāo),其中python-docx庫(kù)非常適合讀取Word文檔(.docx)的內(nèi)容。下面的代碼示例展示了一個(gè)名為extract_tables_from_docx的函數(shù),該函數(shù)接收一個(gè)Word文檔的路徑作為輸入,然后解析文檔中的所有表格,并將每個(gè)表格的數(shù)據(jù)以嵌套列表的形式返回。

首先導(dǎo)入必要的庫(kù)

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

該函數(shù)使用了lxml庫(kù)來(lái)解析XML,因?yàn)?docx文件本質(zhì)上是ZIP壓縮包,其中包含了用于描述文檔結(jié)構(gòu)的XML文件。lxml庫(kù)允許通過(guò)XPath查詢來(lái)訪問(wèn)這些XML元素,從而處理單元格的合并和跨度。

2.保存表格數(shù)據(jù)

一旦表格數(shù)據(jù)被提取出來(lái),就可以將其保存為CSV或JSON格式。為此,定義了兩個(gè)輔助函數(shù)save_tables_to_csv和save_tables_to_json,它們分別負(fù)責(zé)將表格數(shù)據(jù)寫入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.處理文件夾中的多個(gè)Word文檔

為了批量處理文件夾中的多個(gè)Word文檔,我們可以使用os.listdir和列表推導(dǎo)式來(lái)獲取所有.doc或.docx文件的列表。然后,對(duì)于列表中的每個(gè)文件,我們調(diào)用上述函數(shù)來(lái)提取表格并保存結(jié)果。

# 設(shè)置文件路徑和輸出目錄
docx_path = r'E:\data\\測(cè)試表格'
output_dir = r'E:\data\\測(cè)試表格'

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


# 提取表格數(shù)據(jù)并保存為 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.總結(jié)

通過(guò)這個(gè)腳本,可以輕松地從Word文檔中提取表格數(shù)據(jù),并將其轉(zhuǎn)換為CSV或JSON格式,從而方便進(jìn)一步的數(shù)據(jù)分析或?qū)氲綌?shù)據(jù)庫(kù)中。節(jié)省了手動(dòng)數(shù)據(jù)錄入的時(shí)間,還減少了人為錯(cuò)誤的可能性,提高了數(shù)據(jù)處理的效率和準(zhǔn)確性。

以上就是Python實(shí)現(xiàn)Word文檔中提取表格數(shù)據(jù)并轉(zhuǎn)換為CSV和JSON格式的詳細(xì)內(nèi)容,更多關(guān)于Python Word數(shù)據(jù)提取并轉(zhuǎn)為CSV和JSON的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python?matplotlib自定義colorbar顏色條及內(nèi)置色條詳解

    python?matplotlib自定義colorbar顏色條及內(nèi)置色條詳解

    由于自己畫圖的需要想要用一些自定義的顏色來(lái)做一個(gè)colorbar,所以下面這篇文章主要給大家介紹了關(guān)于python?matplotlib自定義colorbar顏色條及內(nèi)置色條的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Python編寫一個(gè)Excel批量處理的桌面實(shí)用腳本

    Python編寫一個(gè)Excel批量處理的桌面實(shí)用腳本

    在辦公自動(dòng)化的需求越來(lái)越多的今天,用 Python 做一個(gè)屬于自己的“批處理小工具”,能輕松幫你節(jié)省大量重復(fù)勞動(dòng),下面我們就來(lái)看看如何使用Python編寫一個(gè)Excel批量處理的桌面實(shí)用腳本吧
    2025-11-11
  • python中open函數(shù)的基本用法示例

    python中open函數(shù)的基本用法示例

    這篇文章主要給大家介紹了關(guān)于python中open函數(shù)的基本用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python爬蟲Mitmproxy安裝使用學(xué)習(xí)筆記

    python爬蟲Mitmproxy安裝使用學(xué)習(xí)筆記

    這篇文章主要介紹了python爬蟲Mitmproxy學(xué)習(xí)筆記分享,有需要的朋友可以收藏學(xué)習(xí)下,希望可以對(duì)你有所幫助,大家一起共同學(xué)習(xí),共同進(jìn)步
    2021-09-09
  • Django ORM查詢操作方式

    Django ORM查詢操作方式

    Django提供了一套非常方便的類似SqlAlchemy ORM的通過(guò)對(duì)象調(diào)用的方式操作數(shù)據(jù)庫(kù)表的ORM框架,,本文給大家詳細(xì)介紹Django ORM查詢操作方式,感興趣的朋友一起看看吧
    2023-10-10
  • 詳解Python3 pandas.merge用法

    詳解Python3 pandas.merge用法

    pandas提供了一組高級(jí)的、靈活的、高效的核心函數(shù),能夠輕松的將數(shù)據(jù)規(guī)整化。這節(jié)主要對(duì)pandas合并數(shù)據(jù)集的merge函數(shù)進(jìn)行詳解,感興趣的朋友跟隨小編一起看看吧
    2019-09-09
  • python障礙式期權(quán)定價(jià)公式

    python障礙式期權(quán)定價(jià)公式

    這篇文章主要為大家詳細(xì)介紹了python障礙式期權(quán)定價(jià)公式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python聊天室程序(基礎(chǔ)版)

    Python聊天室程序(基礎(chǔ)版)

    這篇文章主要為大家詳細(xì)介紹了Python聊天室程序的基礎(chǔ)版,包含客戶端和服務(wù)器端兩部分,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Pytho的HTTP交互httpx包模塊使用詳解

    Pytho的HTTP交互httpx包模塊使用詳解

    Python 的 httpx 包是一個(gè)用于 HTTP 交互的一個(gè)優(yōu)秀且靈活的模塊。本文進(jìn)行詳細(xì)的講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • python中tkinter實(shí)現(xiàn)GUI程序三個(gè)實(shí)例教程

    python中tkinter實(shí)現(xiàn)GUI程序三個(gè)實(shí)例教程

    Python提供了多個(gè)GUI庫(kù),使開發(fā)人員能夠輕松創(chuàng)建各種交互式界面,這篇文章主要給大家介紹了關(guān)于python中tkinter實(shí)現(xiàn)GUI程序的三個(gè)實(shí)例教程,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05

最新評(píng)論

康定县| 昆明市| 桦川县| 托克托县| 桂阳县| 同心县| 门头沟区| 女性| 饶阳县| 尤溪县| 惠东县| 红安县| 益阳市| 沂源县| 乌兰察布市| 铁岭市| 靖宇县| 乌苏市| 独山县| 宁津县| 通化市| 铜川市| 佛冈县| 桦川县| 府谷县| 宁南县| 盱眙县| 凯里市| 绥芬河市| 麻栗坡县| 嘉祥县| 玉树县| 宁陵县| 陈巴尔虎旗| 丰台区| 高青县| 昂仁县| 怀安县| 郑州市| 留坝县| 淳安县|