首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 讀取 Word 文檔的實戰方法:win32com 自動化與格式轉換

     編輯:更多程式設計知識

前置準備

安裝 pywin32:pip install pywin32。需在安裝了 Microsoft Word 的 Windows 環境下運行。

基本轉換腳本

from win32com import client as wc

word = wc.Dispatch('Word.Application')
doc = word.Documents.Open(r'c:\test.doc')
doc.SaveAs(r'c:\test.txt', 4)  # 4 = wdFormatText
doc.Close()
word.Quit()

關鍵點:SaveAs 參數 4 生成純文本,便於 Python 以 open(..., 'r') 讀取。若用 2 (wdFormatText 另一種編碼) 可能讀取失敗。

常用保存格式常量

wdFormatText = 2
wdFormatDOSText = 4
wdFormatUnicodeText = 7
wdFormatHTML = 8
wdFormatFilteredHTML = 10  # 更乾淨,公式存為 GIF
wdFormatPDF = 17
wdFormatRTF = 6
# ... 更多見代碼

建議:HTML 輸出優先用 wdFormatFilteredHTML (10),代碼更乾淨,公式圖片為 GIF 而非 WMF。

完整示例:提取試題與答案

import re
from win32com import client as wc

word = wc.Dispatch('Word.Application')
doc = word.Documents.Open(r'c:\test1.doc')
doc.SaveAs(r'c:\test1.txt', 4)
doc.Close()

strings = open(r'c:\test1.txt', 'r').read()
# 正則提取選項並替換為 ()
result = re.findall(r'(\s*[A-D]\s*)|(\xa1*[A-D]\xa1*)|(\s*[A-D]\s*)|(\xa1*[A-D]\xa1*)', strings)
chan = re.sub(r'(\s*[A-D]\s*)|(\xa1*[A-D]\xa1*)|(\s*[A-D]\s*)|(\xa1*[A-D]\xa1*)', '()', strings)

with open(r'c:\question', 'a+') as qf:
    qf.write(chan)
with open(r'c:\answeronly', 'a+') as af:
    for i, a in enumerate(result):
        m = re.search('[A-D]', a)
        af.write(f'{i+1} {m.group()}\n')

注意事項

  • Word COM 自動化需桌面交互權限,服務端部署需配置 DCOM 權限;
  • 大批量處理建議使用 python-docx(純 Python 解析 .docx)或 LibreOffice 無頭模式轉換;
  • 文件路徑使用原始字符串 r'...' 避免轉義問題。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved