亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python提取Word表格數(shù)據(jù)的詳細(xì)教程

 更新時(shí)間:2025年07月06日 10:17:07   作者:盹貓  
最近由于工作上的需要,需要使用Python完成DOC文檔格式數(shù)據(jù)的讀取和修改工作,所以本篇文章就是記錄使用LibreOffice+python-docx完成doc文檔內(nèi)表格的轉(zhuǎn)換和修改的,需要的朋友可以參考下

一、編寫(xiě)目的

最近由于工作上的需要,需要使用Python完成DOC文檔格式數(shù)據(jù)的讀取和修改工作,但通過(guò)查閱相關(guān)資料,直接對(duì)DOC文檔進(jìn)行讀取和修改沒(méi)有相關(guān)的依賴(lài)(主要為doc文件為較早的windows系統(tǒng)支持格式),需要將DOC文件轉(zhuǎn)換為.docx格式,為什么是docx格式?

  • ??.docx 是 XML 格式,通常無(wú)編碼問(wèn)題??,但若從其他格式轉(zhuǎn)換可能出錯(cuò)。
  • python-docx依賴(lài)庫(kù)可以直接對(duì)docx文檔格式進(jìn)行操作,但無(wú)法對(duì)doc格式進(jìn)行操作。

那么問(wèn)題就轉(zhuǎn)變?yōu)槿绾螌oc格式轉(zhuǎn)換為.docx格式的問(wèn)題,有下面的解決方法:

  • 如果你在windows系統(tǒng)上且安裝有Microsoft Word 可以使用pywin32調(diào)用Word提供的COM口進(jìn)行格式轉(zhuǎn)換。

那如果就不想花錢(qián)或者安裝Word,或者我使用的是其它系統(tǒng)(如Linux系統(tǒng))又該如何轉(zhuǎn)換doc格式到.docx格式呢?

這里也找到了相關(guān)的軟件支持:LibreOffice。它提供了和Word幾乎相同的功能,但其為免費(fèi)開(kāi)源的,并且可以通過(guò)命令行進(jìn)行調(diào)用,最重要的可以多系統(tǒng)支持。

本篇文章就是記錄使用LibreOffice+python-docx完成doc文檔內(nèi)表格的轉(zhuǎn)換和修改的。

二、環(huán)境準(zhǔn)備

1、安裝LibreOffice

如果是Windows系統(tǒng)可以官網(wǎng)下載LibreOffice的.exe安裝包,然后就是不斷地下一步即可。

如果是Linux系統(tǒng)可以通過(guò)下面的命令進(jìn)行安裝:

Ubuntu/Debian??:

sudo apt update && sudo apt install libreoffice

 ?Fedora??:

sudo dnf install libreoffice

??openSUSE??:

sudo zypper install libreoffice

安裝完成后,可以在命令行中進(jìn)行版本驗(yàn)證:

soffice --version

如果輸出下述內(nèi)容則表明安裝成功:

LibreOffice 25.2.3.2 bbb074479178df812d175f709636b368952c2ce3

2、安裝python-docx

 在已有的python環(huán)境下安裝python-docx可以使用以下命令:

pip install python-docx

三、代碼實(shí)現(xiàn)

1、轉(zhuǎn)換成docx

 根據(jù)上面的步驟,先進(jìn)行doc到docx的轉(zhuǎn)換,我們可以使用以下命令進(jìn)行轉(zhuǎn)換:

soffice --headless --convert-to <目標(biāo)格式> <輸入文件> [--outdir <輸出目錄>]

 當(dāng)然這里需要再Python中進(jìn)行命令行的調(diào)用,直接上代碼:

import os
import subprocess
import re

def convert_doc_to_docx(doc_path, output_dir, soffice_path=None):
    """
    使用 LibreOffice 將 .doc 轉(zhuǎn)換為 .docx
    :param doc_path: .doc 文件路徑
    :param output_dir: 輸出目錄(默認(rèn)當(dāng)前目錄)
    :param soffice_path: LibreOffice 的 soffice.exe 完整路徑(可選)
    :return: 轉(zhuǎn)換后的 .docx 文件路徑
    """
    if not doc_path.lower().endswith('.doc'):
        raise ValueError("輸入文件必須是 .doc 格式")

    # 確保輸出目錄存在
    os.makedirs(output_dir, exist_ok=True)

    # 構(gòu)造輸出路徑
    base_name = os.path.splitext(os.path.basename(doc_path))[0]
    docx_path = os.path.join(output_dir, f"{base_name}.docx")

    # 檢查 LibreOffice 是否安裝
    if soffice_path is None:
        try:
            # 嘗試調(diào)用 soffice 命令
            subprocess.run(["soffice", "--version"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            soffice_cmd = ["soffice"]
        except FileNotFoundError:
            raise RuntimeError("LibreOffice 未安裝或未添加到系統(tǒng) PATH 中。請(qǐng)確保 LibreOffice 已正確安裝并在 PATH 中,或提供 soffice.exe 的完整路徑。")
    else:
        soffice_cmd = [soffice_path]

    # 使用 LibreOffice 轉(zhuǎn)換
    try:
        subprocess.run(
            soffice_cmd + ["--headless","--nodefault","--nologo", "--convert-to", "docx", "--outdir", output_dir, doc_path],
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE
        )
        if not os.path.exists(docx_path):
            raise RuntimeError(f"轉(zhuǎn)換失敗,未找到輸出文件: {docx_path}")
        return docx_path
    except subprocess.CalledProcessError as e:
        error_msg = f"轉(zhuǎn)換失敗: {e.stderr.decode()}"
        raise RuntimeError(error_msg)

在上面的代碼中先進(jìn)行LibreOffice環(huán)境是否安裝的檢測(cè),然后調(diào)用命令行進(jìn)行目標(biāo)文件的轉(zhuǎn)換,轉(zhuǎn)換完成的文件放到output_dir目錄下。

2、讀取和修改

轉(zhuǎn)換成docx文件后就可以使用python-docx依賴(lài)對(duì)數(shù)據(jù)進(jìn)行操作了,下面的Python代碼實(shí)現(xiàn)了docx文檔內(nèi)表格的讀取:

from docx import Document

def read_docx_tables(docx_path):
    """
    使用 python-docx 讀取 .docx 文件中的表格
    :param docx_path: .docx 文件路徑
    :return: 表格數(shù)據(jù)列表(每行是一個(gè)列表)
    """
    try:
        doc = Document(docx_path)
    except Exception as e:
        raise RuntimeError(f"無(wú)法讀取 .docx 文件: {e}")

    tables_data = []

    for i, table in enumerate(doc.tables):
        print(f"\n表格 {i + 1}:")
        table_data = []
        for row_idx, row in enumerate(table.rows):
            row_data = [cell.text.strip() for cell in row.cells]
            # 清理單元格中的特殊字符
            row_data = [clean_text(cell) for cell in row_data]
            table_data.append(row_data)
            print(row_data)
        tables_data.append(table_data)

    return tables_data

 修改起來(lái)也是非常方便的,只需要在更新row.cells[索引].text后,執(zhí)行一下doc.save(docx_path)的操作,代碼如下:

from docx import Document

def modify_docx_tables(docx_path, output_path=None, modify_func=None):
    """
    僅修改 .docx 文件中的表格數(shù)據(jù)(不讀取原有數(shù)據(jù))
    
    :param docx_path: 輸入的 .docx 文件路徑
    :param output_path: 輸出的 .docx 文件路徑(如果為 None,則覆蓋原文件)
    :param modify_func: 修改表格數(shù)據(jù)的函數(shù)(接收 table 并直接修改)
    """
    if output_path is None:
        output_path = docx_path  # 默認(rèn)覆蓋原文件

    try:
        doc = Document(docx_path)
    except Exception as e:
        raise RuntimeError(f"無(wú)法讀取 .docx 文件: {e}")

    for i, table in enumerate(doc.tables):
        print(f"\n修改表格 {i + 1}:")
        
        """
        示例修改函數(shù):將所有單元格內(nèi)容改為 "MODIFIED"
        """
        for row in table.rows:
            for cell in row.cells:
                cell.text = "MODIFIED"  # 直接修改單元格內(nèi)容

    # 保存修改后的文檔
    doc.save(output_path)
    print(f"\n表格數(shù)據(jù)已修改并保存到: {output_path}")


四、總結(jié)

上面就是對(duì)doc格式的文檔表格的讀取和修改操作的全部?jī)?nèi)容了,雖然doc文件格式比較落后,但不可避免的有些公司可能有些比較古老的系統(tǒng),在日常生產(chǎn)中就使用到doc文件格式,如果你有這方面的需求,希望這篇文章能幫助到你。

以上就是Python提取Word表格數(shù)據(jù)的詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于Python提取Word表格數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Python搭建虛擬環(huán)境的配置方法

    使用Python搭建虛擬環(huán)境的配置方法

    python 的虛擬環(huán)境可以為一個(gè) python 項(xiàng)目提供獨(dú)立的解釋環(huán)境、依賴(lài)包等資源,既能夠很好的隔離不同項(xiàng)目使用不同 python 版本帶來(lái)的沖突,而且還能方便項(xiàng)目的發(fā)布。這篇文章主要介紹了使用Python虛擬環(huán)境,需要的朋友可以參考下
    2018-02-02
  • Python讀取Windows和Linux的CPU、GPU、硬盤(pán)等部件溫度的讀取方法

    Python讀取Windows和Linux的CPU、GPU、硬盤(pán)等部件溫度的讀取方法

    本文詳細(xì)介紹了如何使用Python在Windows和Linux系統(tǒng)上通過(guò)OpenHardwareMonitor和psutil庫(kù)讀取CPU、GPU等部件的溫度,包括Windows下的兩種方法以及Linux下的簡(jiǎn)單實(shí)現(xiàn),感興趣的小伙伴跟著小編一起來(lái)看看吧
    2025-02-02
  • python 時(shí)間 T 去掉 帶上ms 毫秒 時(shí)間格式的操作

    python 時(shí)間 T 去掉 帶上ms 毫秒 時(shí)間格式的操作

    這篇文章主要介紹了python 時(shí)間 T 去掉 帶上ms 毫秒 時(shí)間格式的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Python下調(diào)用Linux的Shell命令的方法

    Python下調(diào)用Linux的Shell命令的方法

    有時(shí)候難免需要直接調(diào)用Shell命令來(lái)完成一些比較簡(jiǎn)單的操作,這篇文章主要介紹了Python下調(diào)用Linux的Shell命令的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Python3.4實(shí)現(xiàn)從HTTP代理網(wǎng)站批量獲取代理并篩選的方法示例

    Python3.4實(shí)現(xiàn)從HTTP代理網(wǎng)站批量獲取代理并篩選的方法示例

    這篇文章主要介紹了Python3.4實(shí)現(xiàn)從HTTP代理網(wǎng)站批量獲取代理并篩選的方法,涉及Python網(wǎng)絡(luò)連接、讀取、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Python中的面向?qū)ο缶幊淘斀?上)

    Python中的面向?qū)ο缶幊淘斀?上)

    這篇文章主要介紹了Python中的面向?qū)ο缶幊淘斀?上),本文講解了創(chuàng)建類(lèi)、實(shí)例化類(lèi)、類(lèi)屬性、特殊方法內(nèi)建屬性、靜態(tài)變量屬性、實(shí)例變量屬性、方法屬性、靜態(tài)方法、類(lèi)方法等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • python區(qū)塊鏈創(chuàng)建多個(gè)交易教程

    python區(qū)塊鏈創(chuàng)建多個(gè)交易教程

    這篇文章主要為大家介紹了python區(qū)塊鏈創(chuàng)建多個(gè)交易的實(shí)現(xiàn)示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • yolov5 win10 CPU與GPU環(huán)境搭建過(guò)程

    yolov5 win10 CPU與GPU環(huán)境搭建過(guò)程

    這篇文章主要介紹了yolov5 win10 CPU與GPU環(huán)境搭建過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Python的圖像處理庫(kù)Pillow安裝與使用教程

    Python的圖像處理庫(kù)Pillow安裝與使用教程

    Pillow庫(kù)是Python中用于圖像處理的開(kāi)源庫(kù),提供了豐富的圖像處理功能,如圖像讀取、保存、裁剪、調(diào)整大小、旋轉(zhuǎn)、添加文字等,這篇文章主要給大家介紹了關(guān)于Python的圖像處理庫(kù)Pillow安裝與使用的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • Python2.5/2.6實(shí)用教程 入門(mén)基礎(chǔ)篇

    Python2.5/2.6實(shí)用教程 入門(mén)基礎(chǔ)篇

    本文方便有經(jīng)驗(yàn)的程序員進(jìn)入Python世界.本文適用于python2.5/2.6版本.
    2009-11-11

最新評(píng)論