最新国产好看的视频,伊人天堂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ān)資料,直接對(duì)DOC文檔進(jìn)行讀取和修改沒有相關(guān)的依賴(主要為doc文件為較早的windows系統(tǒng)支持格式),需要將DOC文件轉(zhuǎn)換為.docx格式,為什么是docx格式?

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

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

  • 如果你在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)開源的,并且可以通過命令行進(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)可以通過下面的命令進(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)表格的讀?。?/p>

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)文章

最新評(píng)論

苍梧县| 同德县| 宁波市| 迁西县| 苍溪县| 奉新县| 长沙县| 盐津县| 建平县| 南和县| 定远县| 广汉市| 府谷县| 堆龙德庆县| 大同市| 宿松县| 鲁山县| 宝清县| 绥中县| 吉安市| 台安县| 阿克陶县| 安塞县| 南木林县| 赤峰市| 赤峰市| 都昌县| 曲水县| 连云港市| 壤塘县| 灌南县| 白银市| 郎溪县| 天峻县| 淮北市| 屏山县| 习水县| 大余县| 财经| 济源市| 丽江市|