使用python-docx和win32com庫實(shí)現(xiàn)批量轉(zhuǎn)換doc文件為docx文件
一、安裝 python-docx 和 win32com 庫
在windows命令行窗口執(zhí)行如下代碼:
pip install python-docx pip install pywin32 C:\Users\wgx58>pip install python-docx Collecting python-docx Using cached python_docx-1.2.0-py3-none-any.whl.metadata (2.0 kB) Requirement already satisfied: lxml>=3.1.0 in c:\python\lib\site-packages (from python-docx) (6.0.2) Requirement already satisfied: typing_extensions>=4.9.0 in c:\python\lib\site-packages (from python-docx) (4.15.0) Using cached python_docx-1.2.0-py3-none-any.whl (252 kB) Installing collected packages: python-docx Successfully installed python-docx-1.2.0 C:\Users\wgx58>pip install pywin32 Collecting pywin32 Downloading pywin32-311-cp313-cp313-win_amd64.whl.metadata (10 kB) Downloading pywin32-311-cp313-cp313-win_amd64.whl (9.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5/9.5 MB 12.7 kB/s 0:09:26 Installing collected packages: pywin32 Successfully installed pywin32-311
二、編寫如下程序代碼
import os
import glob
from win32com import client as wc
from docx import Document
import pythoncom
def doc_to_docx(input_path, output_path):
"""
將單個(gè)doc文件轉(zhuǎn)換為docx文件
"""
try:
# 初始化COM組件(單線程)
pythoncom.CoInitialize()
# 創(chuàng)建Word應(yīng)用程序?qū)ο?
word = wc.Dispatch("Word.Application")
word.Visible = False # 不顯示W(wǎng)ord界面
# 打開doc文件
doc = word.Documents.Open(input_path)
# 保存為docx格式
doc.SaveAs(output_path, 16) # 16表示docx格式
# 關(guān)閉文檔和Word應(yīng)用程序
doc.Close()
word.Quit()
print(f"成功轉(zhuǎn)換: {input_path} -> {output_path}")
return True
except Exception as e:
print(f"轉(zhuǎn)換失敗 {input_path}: {str(e)}")
return False
finally:
# 釋放COM組件
pythoncom.CoUninitialize()
def batch_doc_to_docx(input_folder, output_folder=None):
"""
批量轉(zhuǎn)換文件夾中的所有doc文件為docx格式
Args:
input_folder: 輸入文件夾路徑
output_folder: 輸出文件夾路徑,如果為None則使用輸入文件夾
"""
if output_folder is None:
output_folder = input_folder
# 確保輸出文件夾存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 查找所有doc文件
doc_files = glob.glob(os.path.join(input_folder, "*.doc"))
if not doc_files:
print(f"在文件夾 {input_folder} 中未找到任何doc文件")
return
print(f"找到 {len(doc_files)} 個(gè)doc文件,開始轉(zhuǎn)換...")
success_count = 0
failed_files = []
for doc_file in doc_files:
# 生成輸出文件路徑
filename = os.path.basename(doc_file)
docx_filename = os.path.splitext(filename)[0] + ".docx"
output_path = os.path.join(output_folder, docx_filename)
# 轉(zhuǎn)換文件
if doc_to_docx(doc_file, output_path):
success_count += 1
else:
failed_files.append(doc_file)
# 輸出轉(zhuǎn)換結(jié)果
print(f"\n轉(zhuǎn)換完成!")
print(f"成功: {success_count}/{len(doc_files)}")
if failed_files:
print(f"失敗的文件:")
for file in failed_files:
print(f" - {file}")
def main():
"""
主函數(shù),提供用戶交互界面
"""
print("=== DOC 轉(zhuǎn) DOCX 批量轉(zhuǎn)換工具 ===")
# 獲取輸入文件夾
input_folder = input("請(qǐng)輸入包含doc文件的文件夾路徑: ").strip()
if not os.path.exists(input_folder):
print("錯(cuò)誤:指定的文件夾不存在!")
return
# 詢問輸出文件夾
use_same_folder = input("是否將docx文件保存在同一文件夾?(y/n): ").strip().lower()
if use_same_folder == 'y':
output_folder = input_folder
else:
output_folder = input("請(qǐng)輸入輸出文件夾路徑: ").strip()
# 開始轉(zhuǎn)換
batch_doc_to_docx(input_folder, output_folder)
if __name__ == "__main__":
main()
三、測(cè)試程序
程序運(yùn)行結(jié)果如下:
C:\python\python.exe C:\Users\wgx58\PycharmProjects\PythonProject1\hello.py
=== DOC 轉(zhuǎn) DOCX 批量轉(zhuǎn)換工具 ===
請(qǐng)輸入包含doc文件的文件夾路徑: D:\python_wgx\word_doc
是否將docx文件保存在同一文件夾?(y/n): n
請(qǐng)輸入輸出文件夾路徑: D:\python_wgx\word_docx
找到 1 個(gè)doc文件,開始轉(zhuǎn)換...
成功轉(zhuǎn)換: D:\python_wgx\word_doc\aa.doc -> D:\python_wgx\word_docx\aa.docx
轉(zhuǎn)換完成!
成功: 1/1
進(jìn)程已結(jié)束,退出代碼為 0
到此這篇關(guān)于使用python-docx和win32com庫實(shí)現(xiàn)批量轉(zhuǎn)換doc文件為docx文件的文章就介紹到這了,更多相關(guān)python-docx win32com轉(zhuǎn)換doc為docx內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解python定時(shí)簡單爬取網(wǎng)頁新聞存入數(shù)據(jù)庫并發(fā)送郵件
這篇文章主要介紹了python定時(shí)簡單爬取網(wǎng)頁新聞存入數(shù)據(jù)庫并發(fā)送郵件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Python報(bào)錯(cuò)之如何解決matplotlib繪圖中文顯示成框框問題
這篇文章主要介紹了Python報(bào)錯(cuò)之如何解決matplotlib繪圖中文顯示成框框問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Python Sweetviz輕松實(shí)現(xiàn)探索性數(shù)據(jù)分析
Sweetviz是一個(gè)開放源代碼Python庫,可生成精美的高密度可視化文件,以單行代碼啟動(dòng)EDA(探索性數(shù)據(jù)分析)。輸出是一個(gè)完全獨(dú)立的HTML應(yīng)用程序,該系統(tǒng)圍繞快速可視化目標(biāo)值和比較數(shù)據(jù)集而構(gòu)建。其目標(biāo)是幫助快速分析目標(biāo)特征,訓(xùn)練與測(cè)試數(shù)據(jù)以及其他此類數(shù)據(jù)表征任務(wù)2021-11-11
python使用matplotlib畫出的圖怎樣放到word中
這篇文章主要介紹了python使用matplotlib畫出的圖怎樣放到word中問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Python利用pytest和selenium實(shí)現(xiàn)自動(dòng)化測(cè)試完整指南
自動(dòng)化測(cè)試是現(xiàn)代軟件開發(fā)中不可或缺的一環(huán),Python作為一門簡潔優(yōu)雅的編程語言,配合pytest測(cè)試框架和selenium自動(dòng)化工具,為我們提供了強(qiáng)大的自動(dòng)化測(cè)試解決方案,下面小編就來和大家簡單介紹一下吧2025-08-08
python基于plotly實(shí)現(xiàn)畫餅狀圖代碼實(shí)例
這篇文章主要介紹了python基于plotly實(shí)現(xiàn)畫餅狀圖代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
python利用os模塊編寫文件復(fù)制功能——copy()函數(shù)用法
這篇文章主要介紹了python利用os模塊編寫文件復(fù)制功能——copy()函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07
解決Jupyter NoteBook輸出的圖表太小看不清問題
這篇文章主要介紹了解決Jupyter NoteBook輸出的圖表太小看不清問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04

