python批量提取word内信息
#coding:utf-8 importos importwin32com fromwin32com.clientimportDispatch,constants fromdocximportDocument defparse_doc(f): """读取doc,返回姓名和行业 """ doc=w.Documents.Open(FileName=f) t=doc.Tables[0]#根据文件中的图表选择信息 name=t.Rows[0].Cells[1].Range.Text situation=t.Rows[0].Cells[5].Range.Text people=t.Rows[1].Cells[1].Range.Text title=t.Rows[1].Cells[3].Range.Text printname,situation,people,title doc.Close() defparse_docx(f): """读取docx,返回姓名和行业 """ d=Document(f) t=d.tables[0] name=t.cell(0,1).text situation=t.cell(0,8).text people=t.cell(1,2).text title=t.cell(1,8).text printname,situation,people,title if__name__=="__main__": w=win32com.client.Dispatch('Word.Application') #遍历文件 PATH="H:\work\\aaa"#windows文件路径 doc_files=os.listdir(PATH) fordocindoc_files: ifos.path.splitext(doc)[1]=='.docx': try: parse_docx(PATH+'\\'+doc) exceptExceptionase: printe elifos.path.splitext(doc)[1]=='.doc': try: parse_doc(PATH+'\\'+doc) exceptExceptionase: printe下载安装win32com
fromwin32comimportclientaswc word=wc.Dispatch('Word.Application') doc=word.Documents.Open('c:/test') doc.SaveAs('c:/test.text',2) doc.Close() word.Quit()
这种方式产生的text文档,不能用python用普通的r方式读取,为了让python可以用r方式读取,应当写成
doc.SaveAs('c:/test',4)
注意:系统执行完成后,会自动产生文件后缀txt(虽然没有指明后缀)。
在xp系统下面,应当,
open(r'c:\text','r') wdFormatDocument=0wdFormatDocument97=0wdFormatDocumentDefault=16wdFormatDOSText=4wdFormatDOSTextLineBreaks=5wdFormatEncodedText=7wdFormatFilteredHTML=10wdFormatFlatXML=19wdFormatFlatXMLMacroEnabled=20wdFormatFlatXMLTemplate=21wdFormatFlatXMLTemplateMacroEnabled=22wdFormatHTML=8wdFormatPDF=17wdFormatRTF=6wdFormatTemplate=1wdFormatTemplate97=1wdFormatText=2wdFormatTextLineBreaks=3wdFormatUnicodeText=7wdFormatWebArchive=9wdFormatXML=11wdFormatXMLDocument=12wdFormatXMLDocumentMacroEnabled=13wdFormatXMLTemplate=14wdFormatXMLTemplateMacroEnabled=15wdFormatXPS=18照着字面意思应该能对应到相应的文件格式,如果你是office2003可能支持不了这么多格式。word文件转html有两种格式可选wdFormatHTML、wdFormatFilteredHTML(对应数字8、10),区别是如果是wdFormatHTML格式的话,word文件里面的公式等ole对象将会存储成wmf格式,而选用wdFormatFilteredHTML的话公式图片将存储为gif格式,而且目测可以看出用wdFormatFilteredHTML生成的HTML明显比wdFormatHTML要干净许多。 当然你也可以用任意一种语言通过com来调用officeAPI,比如PHP.
fromwin32comimportclientaswc word=wc.Dispatch('Word.Application') doc=word.Documents.Open(r'c:/test1.doc') doc.SaveAs('c:/test1.text',4) doc.Close() importre strings=open(r'c:\test1.text','r').read() result=re.findall('\(\s*[A-D]\s*\)|\(\xa1*[A-D]\xa1*\)|\(\s*[A-D]\s*\)|\(\xa1*[A-D]\xa1*\)',strings) chan=re.sub('\(\s*[A-D]\s*\)|\(\xa1*[A-D]\xa1*\)|\(\s*[A-D]\s*\)|\(\xa1*[A-D]\xa1*\)','()',strings) question=open(r'c:\question','a+') question.write(chan) question.close() answer=open(r'c:\answeronly','a+') fori,ainenumerate(result): m=re.search('[A-D]',a) answer.write(str(i+1)+''+m.group()+'\n') answer.close() chan=re.sub(r'\xa3\xa8\s*[A-D]\s*\xa3\xa9','()',strings)#不要(),容易引起歧义。