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 17 Python
Python 安装setuptools和pip工具操作方法(必看)
May 22 Python
python实现杨辉三角思路
Jul 14 Python
python3 flask实现文件上传功能
Mar 20 Python
利用Python将数值型特征进行离散化操作的方法
Nov 06 Python
详解Django中CBV(Class Base Views)模型源码分析
Feb 25 Python
Django web框架使用url path name详解
Apr 29 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
调整Jupyter notebook的启动目录操作
Apr 10 Python
用于ETL的Python数据转换工具详解
Jul 21 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
删除数组元素实用的PHP数组函数
2008/08/18 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
JavaScript的Backbone.js框架入门学习指引
2016/05/07 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
vue实现计步器功能
2019/11/01 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
使用grappelli为django admin后台添加模板
2014/11/18 Python
Python中的元组介绍
2019/01/28 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
python Django的web开发实例(入门)
2019/07/31 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
自考生毕业自我鉴定
2013/10/10 职场文书
民间借贷借条范本
2015/05/25 职场文书
淮海战役观后感
2015/06/11 职场文书
女性健康讲座主持词
2015/07/04 职场文书
TS 类型兼容教程示例详解
2022/09/23 Javascript