open一个绝对路径地址 python_实例15:用Python批量转换doc文件为docx文件

使用Python的pypiwin32模块,结合win32com,实现批量将.doc文件转换为.docx文件,避免手动操作,提高效率。代码已上传至GitHub和百度网盘,可供下载使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python-docx模块虽然强大,但却不能处理后缀为".doc"的word文件。如果强制读取doc文件,将会报如下错误。

99ae1df53ccfa8794065573c3eba6467.png

import docx #导入docx库
doc = docx.Document("data/公司001合同.doc") #打开word文件
for para in doc.paragraphs: #读取word中的每个段落
print(para.text)
>>>
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-4a254209689d> in <module>
1 import docx #导入docx库
----> 2 doc = docx.Document("data/公司001合同.doc") #打开word文件
3 for para in doc.paragraphs: #读取word中的每个段落
4 print(para.text)

d:\python\lib\site-packages\docx\api.py in Document(docx)
26 if document_part.content_type != CT.WML_DOCUMENT_MAIN:
27 tmpl = "file '%s' is not a Word file, content type is '%s'"
---> 28 raise ValueError(tmpl % (docx, document_part.content_type))
29 return document_part.document
30

ValueError: file 'data/公司001合同.doc' is not a Word file, content type is 'application/vnd.openxmlformats-officedocument.themeManager+xml'

此时需要将“.doc”文件另存为“.docx”文件。然后就可以让python-docx模块尽情发挥了。手动另存为,需要逐个打开doc文件,然后点击“文件”->“另存为”,在弹出的“另存为”对话框中,将“保存类型”选择为“.docx”类型,然后保存。如果有100个文件,那得操作100次,很费时间。python提供了win32com模块(应安装pypiwin32模块,win32com包含在其中,即使用命令"pip install pypiwin32"),其中的SaveAs方法可以代替人手批量将文件另存为我们需要的格式。


首先,我们使用os模块,获取需要做“另存为”操作的文件所在路径。由于后面的win32com模块在处理文件的时候,需要绝对路径,不然程序会报错说“找不到文件”。所以此处需要获取待处理文件的绝对路径,即从根目录开始的路径,注意文件夹层级使用两个反斜杠"\",其中一个斜杠是另一个的转义。

import os #用于获取目标文件所在路径
path="C:\\Users\\dywei\\python\\python_excel\\Exp15.Convert doc to docx\\data\\" # 文件夹绝对路径
files=[]
for file in os.listdir(path):
if file.endswith(".doc"): #排除文件夹内的其它干扰文件,只获取".doc"后缀的word文件
files.append(path+file)
files
>>
['C:\\Users\\dywei\\python\\python_excel\\Exp15.Convert doc to docx\\data\\公司001合同.doc',
'C:\\Users\\dywei\\python\\python_excel\\Exp15.Convert doc to docx\\data\\公司002合同.doc',
'C:\\Users\\dywei\\python\\python_excel\\Exp15.Convert doc to docx\\data\\公司003合同.doc',
'C:\\Users\\dywei\\python\\python_excel\\Exp15.Convert doc to docx\\data\\公司004合同.doc',
'C:\\Users\\dywei\\python\\python_excel\\Exp15.Convert doc to docx\\data\\公司005合同.doc']

然后就可以导入win32com模块,使用Dispatch("Word.Application")打开word应用程序,然后再逐个打开doc文件doc = word.Documents.Open(file),使用SaveAs另存文件为"docx"后缀的文件,另存之后,关闭打开的doc文件,再处理下一个,直到结束。我们保存新文件的时候,还是保持到原文件路径,只是将后缀改为".docx","{}x".format(file)指将在原文件名的末尾加上“x”。如下代码直接拿来使用即可,就不用浪费时间去深究其内部函数的构造了。有用,能解决问题就是硬道理。

from win32com import client as wc #导入模块
word = wc.Dispatch("Word.Application") # 打开word应用程序
for file in files:
doc = word.Documents.Open(file) #打开word文件
doc.SaveAs("{}x".format(file), 12)#另存为后缀为".docx"的文件,其中参数12指docx文件
doc.Close() #关闭原来word文件
word.Quit()
print("完成!")
>>
完成!

批量“另存为”的结果如下所示。若需要将docx文件另存为doc文件,也可用类似的方法。

8f562b67d6c944d6fc68bcbfaf8c1dd0.png

所有源代码和说明都在Jupyter notebook上完成,所用到的代码及Excel 资料已上传GitHub及百度网盘, 欢迎Fork或下载到本地随意玩。。。转载请注明出处,谢谢。
GitHub链接:

https://github.com/weidylan/Office_Automation_by_Using_Python

百度网盘:链接: pan.baidu.com/s/1JjW_ke 提取码: z8nk 
知乎专栏:Python操作Office软件高效工作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值