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中使用PIPE操作Linux管道
Feb 04 Python
详解Python中内置的NotImplemented类型的用法
Mar 31 Python
Python中的hypot()方法使用简介
May 18 Python
Python如何获取系统iops示例代码
Sep 06 Python
K-近邻算法的python实现代码分享
Dec 09 Python
浅谈Python中的私有变量
Feb 28 Python
Python3非对称加密算法RSA实例详解
Dec 06 Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 Python
Python自动抢红包教程详解
Jun 11 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
Python画图高斯分布的示例
Jul 10 Python
Python 实现将数组/矩阵转换成Image类
Jan 09 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 Sql Server连接失败问题及解决办法
2009/08/07 PHP
PHP 实现explort() 功能的详解
2013/06/20 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
php-msf源码详解
2017/12/25 PHP
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
什么是python类属性
2020/06/10 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
2014全国两会学习心得体会1000字
2014/03/10 职场文书
法制教育观后感
2015/06/17 职场文书
企业年会祝酒词
2015/08/11 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
浅谈Python中的正则表达式
2021/06/28 Python
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技