一、安装 python-docx 和 win32com 库
在windows命令行窗口执行如下代码:
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):
"""
将单个doc文件转换为docx文件
"""
try:
# 初始化com组件(单线程)
pythoncom.coinitialize()
# 创建word应用程序对象
word = wc.dispatch("word.application")
word.visible = false # 不显示word界面
# 打开doc文件
doc = word.documents.open(input_path)
# 保存为docx格式
doc.saveas(output_path, 16) # 16表示docx格式
# 关闭文档和word应用程序
doc.close()
word.quit()
print(f"成功转换: {input_path} -> {output_path}")
return true
except exception as e:
print(f"转换失败 {input_path}: {str(e)}")
return false
finally:
# 释放com组件
pythoncom.couninitialize()
def batch_doc_to_docx(input_folder, output_folder=none):
"""
批量转换文件夹中的所有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)} 个doc文件,开始转换...")
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)
# 转换文件
if doc_to_docx(doc_file, output_path):
success_count += 1
else:
failed_files.append(doc_file)
# 输出转换结果
print(f"\n转换完成!")
print(f"成功: {success_count}/{len(doc_files)}")
if failed_files:
print(f"失败的文件:")
for file in failed_files:
print(f" - {file}")
def main():
"""
主函数,提供用户交互界面
"""
print("=== doc 转 docx 批量转换工具 ===")
# 获取输入文件夹
input_folder = input("请输入包含doc文件的文件夹路径: ").strip()
if not os.path.exists(input_folder):
print("错误:指定的文件夹不存在!")
return
# 询问输出文件夹
use_same_folder = input("是否将docx文件保存在同一文件夹?(y/n): ").strip().lower()
if use_same_folder == 'y':
output_folder = input_folder
else:
output_folder = input("请输入输出文件夹路径: ").strip()
# 开始转换
batch_doc_to_docx(input_folder, output_folder)
if __name__ == "__main__":
main()
三、测试程序
程序运行结果如下:
c:\python\python.exe c:\users\wgx58\pycharmprojects\pythonproject1\hello.py
=== doc 转 docx 批量转换工具 ===
请输入包含doc文件的文件夹路径: d:\python_wgx\word_doc
是否将docx文件保存在同一文件夹?(y/n): n
请输入输出文件夹路径: d:\python_wgx\word_docx
找到 1 个doc文件,开始转换...
成功转换: d:\python_wgx\word_doc\aa.doc -> d:\python_wgx\word_docx\aa.docx
转换完成!
成功: 1/1
进程已结束,退出代码为 0
到此这篇关于使用python-docx和win32com库实现批量转换doc文件为docx文件的文章就介绍到这了,更多相关python-docx win32com转换doc为docx内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论