查看原文
其他

用Python批量转换.doc文件

爬虫俱乐部 Stata and Python数据分析 2022-03-15


本文作者:杨慧琳

本文编辑:胡   婧

技术总编:张学人

有问题,不要怕!访问 

http://www.wuhanstring.com/uploads/5_aboutus/爬虫俱乐部-用户问题登记表.docx (复制到浏览器中)下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~

爬虫俱乐部隆重推出数据定制及处理业务,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部高级会员为您排忧解难!

Python利用python-docx库可轻松读取.docx文件,但在读入.doc文件时却往往出现乱码等情况。直接将文件扩展名“.doc”改写为“.docx”极易造成文件的损坏。当然,手动将文件另存为.docx文件也是一个可行的思路。但是,在转换多个文件格式时,这一方法并不可取。因此,本推文将首先介绍程序中需用上的重要模块及语法;其次分步骤展示单个至多个.doc文件的转换方法

假设在根目录“F:/文件转换”下有一系列的.doc文件,如下:

我们需调用win32com模块,将其转换为Python可读取的.docx文件。我们首先下载pywin32扩展包。pywin32是Python for Windows Extension的简称,提供了许多模块,可用于访问低级别的Windows功能,利用win32com接口直接调用office API,并进行文件处理、硬件控制等。在命令提示符中输入如下指令下载扩展包:

pip install pywin32

在此基础上,我们详细介绍如何将单个至多个.doc文件转换为.docx文件。

单个.doc文件转换为.docx文件

我们首先调用win32com模块并打开word应用软件,执行程序:

from win32com import client word = client.Dispatch("Word.Application")

我们以根目录“F:/文件转换”下的文件“奥斯汀——傲慢与偏见.doc”为例,打开该文件,将其转换为.docx格式,并保存在原有目录下。最后,关闭文件及word应用软件。执行程序:

doc = word.Documents.Open(r'F:\文件转换\奥斯汀——傲慢与偏见.doc') doc.SaveAs(r'F:\文件转换\奥斯汀——傲慢与偏见.docx',16) doc.Close()   word.Quit()

其中,在文件名引号前添加原始字符串符号“r”,表示将反斜杠“\”当作其自身含义处理。数字16表示将.doc文件另存为.docx格式文件,即“wdFormatDocumentDefault = 16”。每一转换格式都由特定的数字表示,如“wdFormatPDF = 17”即代表将文件被保存为.pdf格式,在实际程序编写中应作出区分。

执行该段程序后,我们将在目录“F:/文件转换”下看到一个新增文件“奥斯汀——傲慢与偏见.docx”。如下:

爬虫俱乐部是您身边的科研助手,能够为您在数据处理实证研究中提供帮助。承蒙近四万粉丝的支持与厚爱,我们在腾讯课堂推出了网络视频课程,专注于数据整理、网络爬虫、循环命令编制和结果输出…李老师及团队精彩地讲解,深入浅出,注重案例与实战,让您更加快速高效地掌握Stata技巧及数据处理的精髓,而且可以无限次重复观看,在原有课程基础上已上传了三节全新的内容!百分百好评,简单易学,一个月让您从入门到精通。绝对物超所值!观看学习网址:

https://ke.qq.com/course/286526?tuin=1b60b462,

敬请关注!

批量转换多个.doc文件

由于该目录下有一系列.doc文件,采用逐个转换的方式将极为繁琐。因此,我们需先定构造一个转换函数,并结合循环句式进行.doc文件的批量转换,将转换后的文件保存于新目录“F:/转换完成”下。

首先,我们定义一个转换函数doc_to_docx( ),表示将该路径下的.doc文件转换为.docx文件。在将文件另存为.docx格式时,我们也调用了os.path.split( )函数及os.path.splitext( )函数,前者用于分割目录与文件名,后者可分离文件名与扩展名。在转换后的.docx文件名前添加路径“F:\\转换完成\\”,便可将处理好的文件保存在路径“F:/转换完成”下。doc_to_docx( )函数定义式如下:

def doc_to_docx(path):    word = client.Dispatch('Word.Application')    doc = word.Documents.Open(path)    doc.SaveAs("F:\\转换完成\\"+os.path.splitext(os.path.split(path)[1])[0]+".docx", 16)    doc.Close()      word.Quit()

其次,我们采用循环,遍历目录“F:/文件转换”下的全部.doc文件,并将其转换为.docx文件。完整程序及结果如下:

import os path = r'F:\文件转换'
#os.mkdir(r'F:\转换完成')     #生成新目录"F:/转换完成"
from win32com import client
#定义转换函数
def doc_to_docx(path):    word = client.Dispatch('Word.Application')  #打开word应用程序    doc = word.Documents.Open(path)  # 打开目标路径下的文件    doc.SaveAs("F:\\转换完成\\"+os.path.splitext(os.path.split(path)[1])[0]+".docx", 16)    doc.Close()      word.Quit()
#批量转换文件
for filename in os.listdir(path):    filename = os.path.join(path, filename)    print(filename)    doc_to_docx(filename)

这样,我们便可直接调用python-docx库读入.docx文件了。接下来,我们拓展一下本推文中使用的pywin32库在文件格式转换中的其他用法。

1.启动独立的进程。我们以打开word应用软件为例,执行如下程序:

word = client.DispatchEx("Word.Application")

若要打开其他类型的应用软件,则修改括号内的“Word”符号,填入需启动的其他应用名称,如“Excel”、 “Outlook”、 “InternetExplorer”等。

2.设置文件保存格式。在本推文中,我们了解到若文件保存格式为.docx,则需在转换程序中添加样式“16”,而其他格式的文件转换也有特定的数字标识。我们列举几个常见格式:

在实际文件处理中,我们可以自行设置程序打开方式,也可选择所需的样式编号。以上就是pywin32模块在文件格式转换中的简单应用。一起来操作一下吧!

对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。




此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存