安裝 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')
python-docx(純 Python 解析 .docx)或 LibreOffice 無頭模式轉換;r'...' 避免轉義問題。