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实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
Python实现提取文章摘要的方法
Apr 21 Python
python 实现在Excel末尾增加新行
May 02 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
django缓存配置的几种方法详解
Jul 16 Python
Python修改文件往指定行插入内容的实例
Jan 30 Python
Python Pandas分组聚合的实现方法
Jul 02 Python
python实现键盘输入的实操方法
Jul 16 Python
python实现打砖块游戏
Feb 25 Python
python实现udp聊天窗口
Mar 31 Python
4行Python代码生成图像验证码(2种)
Apr 07 Python
如何理解python接口自动化之logging日志模块
Jun 15 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
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
原生JS实现留言板功能
2020/02/08 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
推荐下python/ironpython:从入门到精通
2007/10/02 Python
pyqt4教程之widget使用示例分享
2014/03/07 Python
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
Fabric 应用案例
2016/08/28 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
Python编程求质数实例代码
2018/01/31 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
python随机数分布random测试
2018/08/27 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
django框架创建应用操作示例
2019/09/26 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
Shell编程面试题
2012/05/30 面试题
酒吧创业计划书
2014/01/18 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
小学师德师风整改措施
2014/10/27 职场文书
检讨书格式
2015/05/07 职场文书
给领导敬酒词
2015/08/12 职场文书
小学生大队委竞选稿
2015/11/20 职场文书