Python实现docx与doc文件互相转换及批量处理

拾光
拾光
发布时间:2026-10-14 | 1人浏览过
原创

本文介绍如何利用Python的win32com库实现Word文档格式的相互转换。通过调用Microsoft Word应用程序接口,演示了单个doc与docx文件的互转方法,包括关键SaveAs参数说明。此外,提供了递归遍历文件夹并批量将.doc转换为.docx的完整源码,适用于需要处理大量历史文档的场景。

由于某些文件格式规范要求,经常需要在docx与doc格式之间进行相互转换。为此,整理了一套Python代码方案,供需要的朋友参考使用。


from win32com import client
#转换doc为docx
def doc2docx(fn):
  word = client.Dispatch("Word.Application") # 打开word应用程序
  #for file in files:
  doc = word.Documents.Open(fn) #打开word文件
  doc.SaveAs("{}x".format(fn), 12)#另存为后缀为".docx"的文件,其中参数12或16指docx文件
  doc.Close() #关闭原来word文件
  word.Quit()
#转换docx为doc
def docx2doc(fn):
  word = client.Dispatch("Word.Application") # 打开word应用程序
  #for file in files:
  doc = word.Documents.Open(fn) #打开word文件
  doc.SaveAs("{}".format(fn[:-1]), 0)#另存为后缀为".docx"的文件,其中参数0指doc
  doc.Close() #关闭原来word文件
  word.Quit()
docx2doc(u"d:\\python\\1.docx")

若需转换为目标格式为其他类型,只需在format文件名参数中修改对应的格式后缀,并配合特定的save as参数即可实现。

例如,将docx文件转换为PDF格式,可以使用以下代码语句:


doc.SaveAs("{}.pdf".format(fn[:-5]), 17)

这里需要特别说明几点注意事项:

该方案依赖于Microsoft Office的完整安装。如果系统中仅安装了金山WPS,则无法直接应用此方法,因为win32com调用的是Word.Application接口。

补充内容:如何使用Python批量将指定文件夹内的所有doc文件转换为docx格式。

定义将单个doc文件转换为docx的核心函数。


import os
from win32com import client
 
def doc_to_docx(path):
  if os.path.splitext(path)[1] == ".doc":
    word = client.Dispatch('Word.Application')
    doc = word.Documents.Open(path) # 目标路径下的文件
    doc.SaveAs(os.path.splitext(path)[0]+".docx", 16) # 转化后路径下的文件
    doc.Close()
    word.Quit()
 
path = ""#填写文件夹路径
doc_to_docx(path)

编写一个递归函数,用于获取指定文件夹及其子目录下所有文件的绝对路径。


import os 
def find_file(path, ext, file_list=[]):
  dir = os.listdir(path)
  for i in dir:
    i = os.path.join(path, i)
    if os.path.isdir(i):
      find_file(i, ext, file_list)
    else:
      if ext == os.path.splitext(i)[1]:
        file_list.append(i)
  return file_list 
 
dir_path = ""
ext = ".doc"
file_list = find_file(dir_path, ext)

完整的批量转换源码示例。


import os
from win32com import client
 
def doc_to_docx(path):
  if os.path.splitext(path)[1] == ".doc":
    word = client.Dispatch('Word.Application')
    doc = word.Documents.Open(path) # 目标路径下的文件
    doc.SaveAs(os.path.splitext(path)[0]+".docx", 16) # 转化后路径下的文件
    doc.Close()
    word.Quit()
 
def find_file(path, ext, file_list=[]):
  dir = os.listdir(path)
  for i in dir:
    i = os.path.join(path, i)
    if os.path.isdir(i):
      find_file(i, ext, file_list)
    else:
      if ext == os.path.splitext(i)[1]:
        file_list.append(i)
  return file_list 
 
dir_path = "C:\Users\python"#批量转换文件夹
ext = ".doc"
file_list = find_file(dir_path, ext)
for file in file_list:
  doc_to_docx(file)

以上为个人整理的经验总结,希望能对大家有所帮助。如果文中存在错误或考虑不周之处,欢迎批评指正。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表