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 28 Python
在Python中操作列表之List.append()方法的使用
May 20 Python
Python下的常用下载安装工具pip的安装方法
Nov 13 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
python调用c++ ctype list传数组或者返回数组的方法
Feb 13 Python
Python中字符串List按照长度排序
Jul 01 Python
Python获取时间戳代码实例
Sep 24 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
如何提高python 中for循环的效率
Apr 15 Python
详解python tcp编程
Aug 24 Python
python中remove函数的踩坑记录
Jan 04 Python
python实现高效的遗传算法
Apr 07 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实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
Prototype使用指南之ajax
2007/01/10 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
[01:13]这,就是刀塔
2014/07/16 DOTA
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
python之文件读取一行一行的方法
2018/07/12 Python
Anaconda2 5.2.0安装使用图文教程
2018/09/19 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
英国玛莎百货澳大利亚:Marks & Spencer Australia
2019/08/30 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
运动会演讲稿200字
2014/08/25 职场文书
小学德育工作总结2015
2015/05/12 职场文书