python批量提取word内信息
admin
2023-07-31 02:35:50
0

单位收集了很多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) #不要(),容易引起歧义。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...