使用python-docx和win32com庫(kù)實(shí)現(xiàn)批量轉(zhuǎn)換doc文件為docx文件
一、安裝 python-docx 和 win32com 庫(kù)
在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庫(kù)實(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í)現(xiàn)簡(jiǎn)單抽獎(jiǎng)器
這篇文章主要介紹了編寫python代碼實(shí)現(xiàn)簡(jiǎn)單抽獎(jiǎng)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Python?OpenCV形態(tài)學(xué)運(yùn)算示例詳解
這篇文章主要為大家介紹了OpenCV中的幾個(gè)形態(tài)學(xué)運(yùn)算,例如:腐蝕&膨脹、開&閉運(yùn)算、梯度運(yùn)算、頂帽運(yùn)算黑帽運(yùn)算,感興趣的可以了解一下2022-04-04
python開發(fā)中module模塊用法實(shí)例分析
這篇文章主要介紹了python開發(fā)中module模塊用法,以實(shí)例形式較為詳細(xì)的分析了Python中模塊的功能、定義及相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
利用Python實(shí)現(xiàn)批量下載上市公司財(cái)務(wù)報(bào)表
這篇文章主要為大家介紹了如何利用Python做個(gè)小工具,可以批量把某網(wǎng)站上的上市公司的財(cái)報(bào)下下來。文中的示例代碼講解詳細(xì),感興趣的可以動(dòng)手試一試2022-03-03
Python散列表(Hash Table)的實(shí)現(xiàn)示例
散列表是一種常用于實(shí)現(xiàn)關(guān)聯(lián)數(shù)組或映射的數(shù)據(jù)結(jié)構(gòu),本文我們將深入講解Python中的散列表,包括散列函數(shù)、沖突解決方法、散列表的實(shí)現(xiàn)和應(yīng)用場(chǎng)景,感興趣的可以了解一下2024-01-01
OpenCV讀取中文路徑圖像失敗的問題解決方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了OpenCV讀取中文路徑圖像失敗的問題的核心概念與實(shí)踐方法,掌握關(guān)鍵技術(shù)要點(diǎn),了解實(shí)際應(yīng)用場(chǎng)景與最佳實(shí)踐2026-05-05
TensorFlow實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)CNN
這篇文章主要為大家詳細(xì)介紹了TensorFlow實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)CNN,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Python設(shè)置和解除Word文檔保護(hù)的實(shí)現(xiàn)步驟
在日常工作和學(xué)習(xí)中,我們經(jīng)常需要使用Word文檔來記錄和分享重要的信息,為了確保文檔內(nèi)容的安全性和完整性,了解如何保護(hù)和取消保護(hù)Word文檔顯得尤為重要,這篇博客將詳細(xì)介紹如何使用Python設(shè)置和解除Word文檔的保護(hù),需要的朋友可以參考下2025-02-02

