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中关于中文编码问题的处理建议
Apr 08 Python
使用Python解析JSON数据的基本方法
Oct 15 Python
python僵尸进程产生的原因
Jul 21 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
Mar 23 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
python binascii 进制转换实例
Jun 12 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
python中数据库like模糊查询方式
Mar 02 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
一文解决django 2.2与mysql兼容性问题
Jul 15 Python
Python csv文件记录流程代码解析
Jul 16 Python
python中绕过反爬虫的方法总结
Nov 25 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
人族 TERRAN 概述
2020/03/14 星际争霸
php变量作用域的深入解析
2013/06/03 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
php计算一个文件大小的方法
2015/03/30 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
直接拿来用的15个jQuery代码片段
2015/09/23 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
python制作mysql数据迁移脚本
2019/01/01 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
pygame实现五子棋游戏
2019/10/29 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
市政施工员自我鉴定
2014/01/15 职场文书
商场总经理岗位职责
2014/02/03 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
啤酒节策划方案
2014/05/28 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
初二物理教学反思
2016/02/19 职场文书