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基础教程之Hello World!
Aug 29 Python
python通过ssh-powershell监控windows的方法
Jun 02 Python
python中字符串前面加r的作用
Jun 04 Python
python实现员工管理系统
Jan 11 Python
Python 字符串换行的多种方式
Sep 06 Python
python通过zabbix api获取主机
Sep 17 Python
Python 中的lambda函数介绍
Oct 10 Python
django解决跨域请求的问题详解
Jan 20 Python
django之导入并执行自定义的函数模块图解
Apr 01 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
Jun 12 Python
python基础入门之字典和集合
Jun 13 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
用PHP函数解决SQL injection
2006/10/09 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
PHP排序算法类实例
2015/06/17 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
javascript TextArea动态显示剩余字符
2008/10/22 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
js模块加载方式浅析
2017/08/12 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
python保存网页图片到本地的方法
2018/07/24 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
高二地理教学反思
2014/01/24 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
绿色校园广播稿
2014/10/13 职场文书
面试复试通知单
2015/04/24 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
好员工观后感
2015/06/17 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
Python字符串常规操作小结
2022/04/03 Python