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 修改文件指定行的方法
May 15 Python
Django框架中render_to_response()函数的使用方法
Jul 16 Python
Python实现excel转sqlite的方法
Jul 17 Python
神经网络相关之基础概念的讲解
Dec 29 Python
python3利用Socket实现通信的方法示例
May 06 Python
python opencv摄像头的简单应用
Jun 06 Python
Python发送手机动态验证码代码实例
Feb 28 Python
python openCV实现摄像头获取人脸图片
Aug 20 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
Dec 17 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 Python
Ubuntu20下的Django安装的方法步骤
Jan 24 Python
Python-OpenCV教程之图像的位运算详解
Jun 21 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
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
php fseek函数读取大文件两种方法
2016/10/12 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
Javascript Global对象
2009/08/13 Javascript
JavaScript null和undefined区别分析
2009/10/14 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
Vue.js递归组件实现组织架构树和选人功能
2019/07/04 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
调试Python程序代码的几种方法总结
2015/04/28 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
strstr()的简单实现
2013/09/26 面试题
2014年度培训工作总结
2014/11/27 职场文书
2015年度企业工作总结
2015/05/21 职场文书
房贷工资证明范本
2015/06/12 职场文书
户外拓展训练感想
2015/08/07 职场文书
Spring Security中用JWT退出登录时遇到的坑
2021/10/16 Java/Android