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简单获取数组元素个数的方法
Jul 13 Python
关于反爬虫的一些简单总结
Dec 13 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 Python
利用Python半自动化生成Nessus报告的方法
Mar 19 Python
提升Python程序性能的7个习惯
Apr 14 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 Python
PyCharm2019 安装和配置教程详解附激活码
Jul 31 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中使用curl_init函数的说明
2010/11/02 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
jquery 日期分离成年月日的代码
2010/05/14 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
Python unittest模块用法实例分析
2018/05/25 Python
利用python求积分的实例
2019/07/03 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
使用django自带的user做外键的方法
2020/11/30 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
高三自我鉴定怎么写
2013/10/19 职场文书
外国语学院毕业生自荐信
2013/10/28 职场文书
前处理班长职位说明书
2014/03/01 职场文书
会计岗位职责模板
2014/03/12 职场文书
疾病防治方案
2014/05/31 职场文书
普通话宣传标语
2014/06/26 职场文书
英语系本科生求职信
2014/07/15 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
农业项目建议书
2014/08/25 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
公司管理建议书
2015/09/14 职场文书
人民币符号
2022/02/17 杂记
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技