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中字典dict常用操作方法实例总结
Apr 04 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
Python用sndhdr模块识别音频格式详解
Jan 11 Python
python退出命令是什么?详解python退出方法
Dec 10 Python
python脚本执行CMD命令并返回结果的例子
Aug 14 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
python查看数据类型的方法
Oct 12 Python
python 二维矩阵转三维矩阵示例
Nov 30 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 Python
opencv python如何实现图像二值化
Feb 03 Python
Python 爬虫的原理
Jul 30 Python
linux中nohup和后台运行进程查看及终止
Jun 24 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
德生PL990的分析评价
2021/03/02 无线电
第十五节--Zend引擎的发展
2006/11/16 PHP
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
很可爱的输入框
2008/08/03 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
js post提交调用方法
2014/02/12 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
35个Python编程小技巧
2014/04/01 Python
python图片验证码生成代码
2016/07/02 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
春节超市活动方案
2014/08/14 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
2015年统战工作总结
2015/05/19 职场文书
Oracle笔记
2021/04/05 Oracle
Python Socket编程详解
2021/04/25 Python
浅谈Python协程asyncio
2021/06/20 Python
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle