Python跨平臺讀取 .doc格式文件的方法
引言
在跨平臺的開發(fā)環(huán)境中,處理不同文件格式是一個常見問題,尤其是老舊的 .doc 格式。Microsoft Word 的 .doc 文件格式不如 .docx 格式那樣廣泛支持,因此我們往往需要一個可靠的方案來讀取和轉(zhuǎn)換 .doc 文件。在這篇博客中,我們將介紹一種基于 Python 的跨平臺方案,使用 LibreOffice 將 .doc 文件轉(zhuǎn)換為 .docx 格式,之后再通過 docx2txt 進(jìn)一步處理文檔內(nèi)容。
方案概述
- 目標(biāo):在跨平臺環(huán)境中,讀取
.doc
格式文件。 - 步驟:
- 使用 LibreOffice 將
.doc
文件轉(zhuǎn)換為.docx
格式。 - 使用
docx2txt
提取.docx
文件的內(nèi)容。
- 使用 LibreOffice 將
這種方法的好處在于:
- LibreOffice 是跨平臺的,支持 Linux、macOS 和 Windows。
docx2txt
是一個輕量級的庫,用于從.docx
文件中提取文本內(nèi)容。
LibreOffice 跨平臺安裝方式
在使用 LibreOffice 轉(zhuǎn)換 .doc
文件之前,您需要在操作系統(tǒng)中安裝 LibreOffice。下面是針對不同操作系統(tǒng)的安裝方法:
1. Windows 安裝
- 訪問 LibreOffice 官方網(wǎng)站:LibreOffice 下載頁面。
- 選擇 Windows 版本,下載并安裝安裝包。
- 安裝完成后,確保
soffice
命令可以在命令行中被正確調(diào)用(通常 LibreOffice 會自動配置環(huán)境變量)。
2. macOS 安裝
- 打開終端,使用 Homebrew 安裝 LibreOffice
brew install --cask libreoffice
- 安裝完成后,LibreOffice 應(yīng)該會自動配置好相關(guān)命令,您可以通過終端運(yùn)行
soffice
來確認(rèn)是否安裝成功。
3. Linux 安裝
- 在 Ubuntu 或 Debian 系統(tǒng)中,您可以使用以下命令安裝 LibreOffice:
sudo apt update sudo apt install libreoffice
- 在 Fedora 系統(tǒng)中,使用以下命令:
sudo dnf install libreoffice
- 安裝完成后,您可以通過
soffice
命令來確認(rèn)是否安裝成功。
4. 驗(yàn)證安裝
在任何操作系統(tǒng)上,您可以通過命令行檢查 soffice
是否正常工作:
soffice --version
如果輸出 LibreOffice 的版本信息,表示安裝成功。
步驟詳解
使用 LibreOffice 轉(zhuǎn)換
.doc
為.docx
: LibreOffice 提供了一個命令行工具soffice
,可以批量處理文件轉(zhuǎn)換。它支持將.doc
文件轉(zhuǎn)換為.docx
格式。通過這種方式,即使原始文件是老舊的.doc
格式,也可以轉(zhuǎn)換為更現(xiàn)代、更易處理的.docx
格式。讀取
.docx
文件內(nèi)容: 轉(zhuǎn)換完成后,我們使用docx2txt
庫來讀取.docx
文件中的文本。docx2txt
提供了簡單的 API,可以提取文檔中的文本內(nèi)容并返回。
完整代碼實(shí)現(xiàn)
以下是實(shí)現(xiàn)上述方案的完整代碼:
import docx2txt import os import subprocess import shlex def convert_doc_to_docx(doc_file, output_directory): """ 使用 LibreOffice 將 .doc 文件轉(zhuǎn)換為 .docx 格式 :raises RuntimeError: 轉(zhuǎn)換失敗時拋出異常 """ try: # 創(chuàng)建輸出目錄(如果不存在) os.makedirs(output_directory, exist_ok=True) # 轉(zhuǎn)義所有參數(shù)防止命令注入 safe_doc_file = shlex.quote(doc_file) safe_output_dir = shlex.quote(output_directory) # 構(gòu)建并執(zhí)行命令 command = f"soffice --headless --convert-to docx --outdir {safe_output_dir} {safe_doc_file}" result = subprocess.run( command, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) print(f"{doc_file} 轉(zhuǎn)換為 .docx 格式完成") except subprocess.CalledProcessError as e: error_msg = f"轉(zhuǎn)換失敗: {e.stderr.strip()}" if e.stderr else "未知錯誤" raise RuntimeError(f"{error_msg}\n命令: {e.cmd}") from e except Exception as e: raise RuntimeError(f"轉(zhuǎn)換過程中發(fā)生意外錯誤: {str(e)}") from e def main(): # 輸入文件路徑 doc_file = "D:/extracodes/open-webui/backend/docs/1.doc" # 根據(jù) doc_file 獲取目錄 output_directory = os.path.dirname(doc_file) # 根據(jù) doc_file 的后綴 .doc 換成 .docx docx_file = doc_file.replace(".doc", ".docx") # 判斷 docx_file 是否已經(jīng)存在, 如果已經(jīng)存在, 則刪除掉它 if os.path.exists(docx_file): os.remove(docx_file) # 第一步:將 .doc 文件轉(zhuǎn)換為 .docx convert_doc_to_docx(doc_file, output_directory) # 第二步:對轉(zhuǎn)換后的 .docx 文件進(jìn)行處理(這里以轉(zhuǎn)換為 HTML 為例) page_content = docx2txt.process(docx_file) print(page_content) if __name__ == "__main__": main()
代碼解釋
convert_doc_to_docx
函數(shù): 該函數(shù)接受.doc
文件路徑和輸出目錄作為輸入,使用 LibreOffice 的命令行工具soffice
來將.doc
文件轉(zhuǎn)換為.docx
格式。--headless
參數(shù)表示不啟動 GUI,--convert-to
用于指定輸出格式。main
函數(shù):- 首先定義了
.doc
文件的路徑doc_file
。 - 然后通過替換文件后綴生成目標(biāo)
.docx
文件路徑。 - 檢查是否已有同名的
.docx
文件,如果有則刪除。 - 調(diào)用
convert_doc_to_docx
函數(shù)進(jìn)行轉(zhuǎn)換。 - 轉(zhuǎn)換完成后,使用
docx2txt.process
從.docx
文件中提取文本內(nèi)容,并輸出。
- 首先定義了
適用環(huán)境
- Linux/macOS/Windows:LibreOffice 和
docx2txt
都是跨平臺的,因此可以在大多數(shù)操作系統(tǒng)上使用。 - Python 環(huán)境:需要安裝
docx2txt
庫,可以通過pip install docx2txt
安裝。
結(jié)語
通過結(jié)合使用 LibreOffice 和 docx2txt
,我們可以方便地跨平臺處理 .doc
文件,轉(zhuǎn)換成 .docx
格式后提取文本內(nèi)容。這種方法簡單、可靠,適用于大多數(shù)需要批量處理 .doc
文件的場景。如果你需要處理更復(fù)雜的文件內(nèi)容或支持更多文件格式,還可以探索其他 Python 庫,如 python-docx
或 PyWin32
(僅限 Windows 環(huán)境)。
以上就是Python跨平臺讀取 .doc格式文件的方法的詳細(xì)內(nèi)容,更多關(guān)于Python跨平臺讀取.doc文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實(shí)踐項(xiàng)目之監(jiān)控當(dāng)前聯(lián)網(wǎng)狀態(tài)詳情
介紹一個利用Python監(jiān)控當(dāng)前聯(lián)網(wǎng)狀態(tài)情況的python代碼,它可以清楚地知道,你的電腦網(wǎng)絡(luò)是否是鏈接成功或失敗,下面小編帶大家來一起學(xué)習(xí)它2019-05-05Python實(shí)現(xiàn)的序列化和反序列化二叉樹算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的序列化和反序列化二叉樹算法,結(jié)合實(shí)例形式分析了Python二叉樹的構(gòu)造、遍歷、序列化、反序列化等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03教你怎么用PyCharm為同一服務(wù)器配置多個python解釋器
當(dāng)我們在服務(wù)器上創(chuàng)建了多個虛擬環(huán)境時,也可以在 PyCharm 中配置這些虛擬環(huán)境,方便不同的項(xiàng)目使用不同的環(huán)境,然而按照網(wǎng)上教程添加多個python解釋器后,PyCharm會自動幫我們創(chuàng)建多個重復(fù)的服務(wù)器,本文主要給出該問題的解決方法,同時也對添加解釋器做一個詳細(xì)的講解2021-05-05Python中numpy.pad()函數(shù)的使用詳解
這篇文章主要介紹了Python中numpy.pad()函數(shù)的使用詳解,在卷積神經(jīng)網(wǎng)絡(luò)中,為了避免卷積運(yùn)算導(dǎo)致輸出圖像縮小和圖像邊緣信息丟失,常常采用圖像邊緣填充技術(shù),即在圖像四周邊緣填充0,使得卷積運(yùn)算后圖像大小不會縮小,同時也不會丟失邊緣和角落的信息,需要的朋友可以參考下2023-10-10Python中Matplotlib的點(diǎn)、線形狀、顏色以及繪制散點(diǎn)圖
與線型圖類似的是,散點(diǎn)圖也是一個個點(diǎn)集構(gòu)成的,下面這篇文章主要給大家介紹了關(guān)于Python中Matplotlib的點(diǎn)、線形狀、顏色以及繪制散點(diǎn)圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04用Python按時間分割txt文件中的數(shù)據(jù)方法步驟
這篇文章主要給大家介紹了如何用Python按時間分割txt文件中的數(shù)據(jù)的方法步驟,文中通過代碼示例給大家講解的非常詳細(xì),對大家學(xué)習(xí)Python處理txt文件有一定的幫助,需要的朋友可以參考下2023-12-12