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)命令,您可以通過終端運行
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. 驗證安裝
在任何操作系統(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)容并返回。
完整代碼實現(xiàn)
以下是實現(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 集合 并集、交集 Series list set 轉(zhuǎn)換的實例
今天小編就為大家分享一篇python 集合 并集、交集 Series list set 轉(zhuǎn)換的實例。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
mat矩陣和npy矩陣實現(xiàn)互相轉(zhuǎn)換(python和matlab)
這篇文章主要介紹了mat矩陣和npy矩陣實現(xiàn)互相轉(zhuǎn)換(python和matlab),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
PyQT中QTableWidget如何根據(jù)單元格內(nèi)容設(shè)置自動寬度
這篇文章主要介紹了PyQT中QTableWidget如何根據(jù)單元格內(nèi)容設(shè)置自動寬度問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
python第三方庫subprocess執(zhí)行cmd同時輸入密碼獲取參數(shù)
本文給大家介紹python subprocess執(zhí)行cmd同時輸入密碼獲取參數(shù),手動輸入cmd命令,本文給大家逐一介紹這個命令的使用方法,感興趣的朋友跟隨小編一起看看吧2024-01-01
Python多進(jìn)程并發(fā)(multiprocessing)用法實例詳解
這篇文章主要介紹了Python多進(jìn)程并發(fā)(multiprocessing)用法,實例分析了multiprocessing模塊進(jìn)程操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06
使用Python和Pyecharts創(chuàng)建交互式地圖
在數(shù)據(jù)可視化領(lǐng)域,創(chuàng)建交互式地圖是一種強大的方式,可以使受眾能夠以引人入勝且信息豐富的方式探索地理數(shù)據(jù),下面我們看看如何使用 Python 和 Pyecharts實現(xiàn)吧2025-04-04
淺談pytorch中torch.max和F.softmax函數(shù)的維度解釋
這篇文章主要介紹了淺談pytorch中torch.max和F.softmax函數(shù)的維度解釋,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python linecache.getline()讀取文件中特定一行的腳本
Python中使用標(biāo)準(zhǔn)庫中的linecache中的getline方法可以從某個文件中讀取出特定的一行。2008-09-09
詳解python架構(gòu)?PyNeuraLogic超越Transformers
這篇文章主要為大家介紹了python使用?PyNeuraLogic超越Transformers示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03

