使用pywin32从MS Word中提取数据
我在
Windows中运行python 3.3,我需要从Word文档中提取字符串.我一直在寻找一周左右的最佳方法来做到这一点.最初我试图将.docx文件保存为.txt并使用RE解析,但我有一些隐藏字符的格式问题 – 我使用脚本打开.docx并保存为.txt.我想知道我是否做了一个正确的文件> SaveAs> .txt它会删除奇怪的格式然后我可以正确解析通过?我不知道,但我放弃了这种方法.
我试图使用docx module,但我被告知它与python 3.3不兼容.所以我留下了使用pywin32和COM.我已成功地使用Excel来获取我需要的数据,但我遇到了Word的问题,因为FAR较少的文档和微软网站上的reading through the object model是我的头脑. 以下是我到目前为止打开文件的内容: import win32com.client as win32 import glob,os word = win32.gencache.EnsureDispatch('Word.Application') word.Visible = True for infile in glob.glob(os.path.join(r'mypath','*.docx')): print(infile) doc = word.Documents.Open(infile) 所以在这一点上我可以做类似的事情 print(doc.Content.Text) 并查看文件的内容,但它看起来仍然有一些奇怪的格式,我不知道如何实际解析以获取我需要的数据.我可以创建RE,它将成功找到我正在寻找的字符串,我只是不知道如何使用COM将它们实现到程序中. 我到目前为止的代码主要是通过Google找到的.我甚至不认为这很难,只是通过微软网站上的对象模型阅读就像读外语一样.任何帮助深表感谢.谢谢. 编辑:我用来将文件从docx保存到txt的代码: for path,dirs,files in os.walk(r'mypath'): for doc in [os.path.abspath(os.path.join(path,filename)) for filename in files if fnmatch.fnmatch(filename,'*.docx')]: print("processing %s" % doc) wordapp.Documents.Open(doc) docastxt = doc.rstrip('docx') + 'txt' wordapp.ActiveDocument.SaveAs(docastxt,FileFormat=win32com.client.constants.wdFormatText) wordapp.ActiveDocument.Close() 解决方法
如果您不想学习Word模型文档的复杂方式,以及通过Office对象模型公开的方式,更简单的解决方案是让Word保存文件的纯文本副本.
这里有很多选择.使用tempfile创建临时文本文件然后将其删除,或者将永久文本文件与doc文件一起存储以供以后重复使用?使用Unicode(在Microsoft中,它表示带有BOM的UTF-16-LE)或编码文本?等等.所以,我只选择合理的东西,你可以查看 wdFormatUnicodeText = 7 for infile in glob.glob(os.path.join(r'mypath','*.docx')): print(infile) doc = word.Documents.Open(infile) txtpath = os.path.splitext('infile')[0] + '.txt' doc.SaveAs(txtpath,wdFormatUnicodeText) doc.Close() with open(txtpath,encoding='utf-16') as f: process_the_file(f) 正如您的评论中所述,这对复杂的事情(如表格,多列文本等)所做的可能并不完全符合您的要求.在这种情况下,您可能需要考虑保存为,例如,wdFormatFilteredHTML,Python有很好的解析器. (BeautifulSoup表比win32com-Word更容易.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-7 – 激活Windows虚拟机进行测试?好坏?
- windows-server-2008 – Windows 2008的邮件服务器
- xaml – 如何在Windows Store Universal App(W8.1 WP8.1)中
- Windows批处理命令用于移动目录中的所有文件夹,例外情况
- windows-server-2008 – 路由和远程访问VPN设置
- 中文翻译:Microsoft 收购 GitHub - A bright future for G
- GNU CC和Windows
- Windows计算机名称 – > iPhone上的IP分辨率?
- Windows Phone 7和Javascript加速计
- windows – 打开WDK Projects会导致出现“发生一个或多个错
- Windows – GIT日志或提交监视器
- 将Windows驱动程序连接到Userland服务
- windows-server-2008-r2 – Windows Server 2008
- windows-server-2008 – 无法让SmarterMail在新的
- 在没有uint8_t数据类型的MCU上使用uint8_t进行结
- xaml – windows phone 7.1中的scrollviewer网格
- 恢复注册表
- windows-phone-7 – WP7的老化测试
- Windows 7或Server 2008显示进程的运行时间
- .net – Microsoft.Scripting.Core.dll在哪里?