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

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

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

一、編寫目的

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

  • ??.docx 是 XML 格式,通常無(wú)編碼問(wèn)題??,但若從其他格式轉(zhuǎn)換可能出錯(cuò)。
  • python-docx依賴庫(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)換。

那如果就不想花錢或者安裝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依賴對(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鍵鼠操作自動(dòng)化庫(kù)PyAutoGUI簡(jiǎn)介(小結(jié))

    Python鍵鼠操作自動(dòng)化庫(kù)PyAutoGUI簡(jiǎn)介(小結(jié))

    這篇文章主要介紹了Python鍵鼠操作自動(dòng)化庫(kù)PyAutoGUI簡(jiǎn)介,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • python 監(jiān)控服務(wù)器是否有人遠(yuǎn)程登錄(詳細(xì)思路+代碼)

    python 監(jiān)控服務(wù)器是否有人遠(yuǎn)程登錄(詳細(xì)思路+代碼)

    這篇文章主要介紹了python 監(jiān)控服務(wù)器是否有人遠(yuǎn)程登錄的方法,幫助大家利用python 監(jiān)控服務(wù)器,感興趣的朋友可以了解下
    2020-12-12
  • VSCode2022配置Python3.9.6的詳細(xì)教程

    VSCode2022配置Python3.9.6的詳細(xì)教程

    這篇文章主要介紹了VSCode2022配置Python3.9.6教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • 10 行 Python 代碼教你自動(dòng)發(fā)送短信(不想回復(fù)工作郵件妙招)

    10 行 Python 代碼教你自動(dòng)發(fā)送短信(不想回復(fù)工作郵件妙招)

    這篇文章主要介紹了10 行 Python 代碼教你自動(dòng)發(fā)送短信(不想回復(fù)工作郵件妙招),目前在國(guó)內(nèi)通過(guò)手機(jī)短信保障信息安全是比較常見(jiàn)的,具體實(shí)例代碼大家跟隨小編一起通過(guò)本文學(xué)習(xí)吧
    2018-10-10
  • python輪詢機(jī)制控制led實(shí)例

    python輪詢機(jī)制控制led實(shí)例

    這篇文章主要介紹了python輪詢機(jī)制控制led實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python中Tkinter實(shí)現(xiàn)分頁(yè)標(biāo)簽的示例代碼

    python中Tkinter實(shí)現(xiàn)分頁(yè)標(biāo)簽的示例代碼

    這篇文章主要介紹了python中Tkinter實(shí)現(xiàn)分頁(yè)標(biāo)簽的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python中根據(jù)字符串調(diào)用函數(shù)的實(shí)現(xiàn)方法

    python中根據(jù)字符串調(diào)用函數(shù)的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇python中根據(jù)字符串調(diào)用函數(shù)的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • Python使用DuckDB秒級(jí)處理超大Excel文件的終極指南

    Python使用DuckDB秒級(jí)處理超大Excel文件的終極指南

    你是否經(jīng)歷過(guò)這樣的絕望:雙擊打開(kāi)一個(gè) 500MB 的 Excel 文件,看著鼠標(biāo)光標(biāo)變成旋轉(zhuǎn)的圓圈,內(nèi)存占用飆升,最后屏幕變白顯示未響應(yīng),本文將手把手教你如何利用 DuckDB 輕松讀取、查詢和分析超大 Excel 文件,需要的朋友可以參考下
    2026-02-02
  • 利用python中集合的唯一性實(shí)現(xiàn)去重

    利用python中集合的唯一性實(shí)現(xiàn)去重

    集合,用{ }表示,集合中所有元素具有唯一性。這篇文章給大家介紹利用python中集合的唯一性實(shí)現(xiàn)去重,感興趣的朋友一起看看吧
    2020-02-02
  • 有趣的python小程序分享

    有趣的python小程序分享

    這篇文章主要介紹了有趣的python小程序分享,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-12-12

最新評(píng)論

双江| 通辽市| 龙井市| 呼伦贝尔市| 香河县| 永吉县| 泗洪县| 娄底市| 油尖旺区| 泾源县| 潞西市| 定结县| 二手房| 舒兰市| 正蓝旗| 巨鹿县| 太和县| 洞头县| 达日县| 泸水县| 溧水县| 昌平区| 牟定县| 龙川县| 北碚区| 汾西县| 诏安县| 哈尔滨市| 济南市| 余姚市| 宣城市| 达州市| 苏尼特右旗| 木里| 清河县| 利津县| 新干县| 四川省| 保山市| 罗甸县| 新建县|