python批量提取word内信息


Posted in Python onAugust 09, 2015
单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个python小程序把所需的信息打印出来
#coding:utf-8
 
import os
import win32com
from win32com.client import Dispatch, constants
from docx import Document
 
def parse_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  
  print name, situation, people,title
  doc.Close()
 
def parse_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
  print name, situation, people,title
 
 
if __name__ == "__main__":
   
  w = win32com.client.Dispatch('Word.Application')
   
  # 遍历文件
  PATH = "H:\work\\aaa" # windows文件路径
  doc_files = os.listdir(PATH)
  for doc in doc_files:
    if os.path.splitext(doc)[1] == '.docx':
      try:
        parse_docx(PATH+'\\'+doc)
      except Exception as e:
        print e
    elif os.path.splitext(doc)[1] == '.doc':
      try:
        parse_doc(PATH+'\\'+doc)
      except Exception as e:
        print e
下载安装win32com
from win32com import client as wc
 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 = 0 wdFormatDocument97 = 0 wdFormatDocumentDefault = 16 wdFormatDOSText = 4 wdFormatDOSTextLineBreaks = 5 wdFormatEncodedText = 7 wdFormatFilteredHTML = 10 wdFormatFlatXML = 19 wdFormatFlatXMLMacroEnabled = 20 wdFormatFlatXMLTemplate = 21 wdFormatFlatXMLTemplateMacroEnabled = 22 wdFormatHTML = 8 wdFormatPDF = 17 wdFormatRTF = 6 wdFormatTemplate = 1 wdFormatTemplate97 = 1 wdFormatText = 2 wdFormatTextLineBreaks = 3 wdFormatUnicodeText = 7 wdFormatWebArchive = 9 wdFormatXML = 11 wdFormatXMLDocument = 12 wdFormatXMLDocumentMacroEnabled = 13 wdFormatXMLTemplate = 14 wdFormatXMLTemplateMacroEnabled = 15 wdFormatXPS = 18
照着字面意思应该能对应到相应的文件格式,如果你是office 2003可能支持不了这么多格式。word文件转html有两种格式可选wdFormatHTML、wdFormatFilteredHTML(对应数字 8、10),区别是如果是wdFormatHTML格式的话,word文件里面的公式等ole对象将会存储成wmf格式,而选用 wdFormatFilteredHTML的话公式图片将存储为gif格式,而且目测可以看出用wdFormatFilteredHTML生成的HTML 明显比wdFormatHTML要干净许多。
当然你也可以用任意一种语言通过com来调用office API,比如PHP.
from win32com import client as wc
 
 word = wc.Dispatch('Word.Application')
 
 doc = word.Documents.Open(r'c:/test1.doc')
 
 doc.SaveAs('c:/test1.text', 4)
 
 doc.Close()
 import re
 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+')
 for i,a in enumerate(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) #不要(),容易引起歧义。
Python 相关文章推荐
跟老齐学Python之编写类之二方法
Oct 11 Python
简单介绍Python中的struct模块
Apr 28 Python
使用Python脚本将Bing的每日图片作为桌面的教程
May 04 Python
举例讲解Python中的身份运算符的使用方法
Oct 13 Python
Pandas探索之高性能函数eval和query解析
Oct 28 Python
python实现图片处理和特征提取详解
Nov 13 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
pytorch实现mnist数据集的图像可视化及保存
Jan 14 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
Python远程linux执行命令实现
Nov 11 Python
python中doctest库实例用法
Dec 31 Python
Python趣味挑战之实现简易版音乐播放器
May 28 Python
python实现下载指定网址所有图片的方法
Aug 08 #Python
Python实现多线程抓取妹子图
Aug 08 #Python
通过Python来使用七牛云存储的方法详解
Aug 07 #Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 #Python
深入理解Python中命名空间的查找规则LEGB
Aug 06 #Python
举例详解Python中yield生成器的用法
Aug 05 #Python
Python中return语句用法实例分析
Aug 04 #Python
You might like
用PHP实现维护文件代码
2007/06/14 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
jQuery 选择器理解
2010/03/16 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
2013/06/26 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
2014/11/20 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
Python设计模式之观察者模式实例
2014/04/26 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
python 装饰器重要在哪
2021/02/14 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
大学团支书的自我评价分享
2013/12/14 职场文书
心得体会怎么写
2013/12/30 职场文书
教师教学评估方案
2014/05/09 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
企业法人任命书
2015/09/21 职场文书
golang DNS服务器的简单实现操作
2021/04/30 Golang