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)#不要(),容易引起歧义。