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操作SQLite简明教程
Jul 10 Python
Python爬取Coursera课程资源的详细过程
Nov 04 Python
Python中线程编程之threading模块的使用详解
Jun 23 Python
[原创]python爬虫(入门教程、视频教程)
Jan 08 Python
利用Python实现原创工具的Logo与Help
Dec 03 Python
Python3实现的判断环形链表算法示例
Mar 07 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
Apr 18 Python
Python实现京东秒杀功能代码
May 16 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
Python selenium如何打包静态网页并下载
Aug 12 Python
python之语音识别speech模块
Sep 09 Python
python实现文件分片上传的接口自动化
Nov 19 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提交后跳转
2013/06/23 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
Python循环语句中else的用法总结
2016/09/11 Python
python实现海螺图片的方法示例
2019/05/12 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
本科生个人求职自荐信
2013/09/26 职场文书
电大毕业自我鉴定
2014/02/03 职场文书
2015年母亲节寄语
2015/03/23 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
Python如何配置环境变量详解
2021/05/18 Python
解决mysql的int型主键自增问题
2021/07/15 MySQL
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python