python批量提取word指定内容_python批量提取word内信息_weixin_39876145的博客-程序员宅基地

技术标签: python批量提取word指定内容  

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39876145/article/details/109858963

智能推荐

python用chi2_contingency做卡方检验结果和手算以及spss不同的问题__,_的博客-程序员宅基地_chi2_contingency

python在使用chi2_contingency做卡方检验时,如果自由度=1,代码底层存在Yate校正,从函数的帮助文档中也可以看出,correction参数默认为TRUE,此时的程序计算结果会和手算以及spss的结果不同,需要改成False才会和其他的结果相同。...

a链接的基础_勤奋的温小卜的博客-程序员宅基地_a连接

不跳转<a href="javascript:void(0)" >不能跳转</a>打开新的页面<a href="" target="_blank"></a>window.open(url)

由于数据库连接池的原因,造成CommunicationsException: Communications link failure,遇到这样的坑,记录下来_纯洁的大白的博客-程序员宅基地_communicationexception是什么报错

一、先上日志报错日志报错太长,就截图了能找到错误的原因,关键在这句:The last packet successfully received from the server was 1,996,637 milliseconds ago. The last packet sent successfully to the server was 1 milliseconds ago.二、问...

电感的选型以及注意事项_隔壁家的王小琪的博客-程序员宅基地

当我在立创商城上搜索电感的时候,可以看到有很多分类贴片电感和磁珠如下图,一般封装较小,和贴片电阻大小差不多,一般在GND之间做连接使用,通常可以和0Ω电阻相互替代。 图1 图2 图3 功率电感一般比较大,通常用来DCDC电路中 图1 图2 图3 ...

HAL硬件抽象层(理解)_zxzcasc的博客-程序员宅基地

HAL层中有三个重要的结构体,它们分别是:hw_module_t、hw_device_t和hw_ module_methods_t。

jumpserver通过网域管理实现本地连接阿里云vpc服务器_爷来辣的博客-程序员宅基地

目标是通过公司内部的jumpserver 连接阿里云的一台拥有经典网络地址的服务器,再连接vpc上的服务器。创建网域列表创建网域阿里云并且点击之后创建网关这里选你可以作为跳板机的虚拟机ip和密码或者秘钥在网域里 添加需要通过跳板机 网关再访问的vpc机子更新资产信息...

随便推点

Seetaface 安装使用教程_zeroQiaoba的博客-程序员宅基地

Seetaface安装方法参照安装教程,有时候会遇到一些问题,我的编译技巧如下: 利用seetafce里面的example有写好的工程,直接运行编译,生成dll和lib文件; 遇到fopen的问题,参照传送门遇到的问题:修改了debug和release,但是运行速度依旧很慢 其中release都需要重新编译 三个模型的功能:人脸检测,人脸特征点提取,人脸相似度比对【里面没有...

一文搞懂 Cocos Creator 3.0 坐标转换原理_Dream Ape的博客-程序员宅基地_cocos creator转换坐标

一文搞懂 Cocos Creator 3.0 坐标转换原理欢迎使用Markdown编辑器屏幕坐标UI 触点坐标UI 多分辨率适配方案UI 触点获取不同坐标之间的转换屏幕坐标与 3D 节点世界坐标互转3D 节点之间的坐标转换屏幕坐标转 UI 触点坐标UI 不同节点之间的坐标转换3D 节点世界坐标转 UI 节点本地坐标射线检测欢迎使用Markdown编辑器转自: cocos官方.Cocos Creator 3.0 如何将世界坐标转屏幕坐标?Creator 3D 怎么将 3D 坐标转化到 Canvas 上面

【过关斩将】小伙子,请做一下自我介绍?_互联网老辛的博客-程序员宅基地

文章目录一. 为什么面试官热衷让你做自我介绍?二. 自我介绍有哪些误区?1. 自爆短处的自我介绍2. 恳求机会的自我介绍3. 流水账形式的自我介绍三. 好的自我介绍有什么特点四. 自我介绍范例五. 总结六. 胜寒的碎碎念大家好,我是高胜寒,本文是过关斩将的第2篇文章,过关斩将系列主要讨论面试中那些常被问到的高频问题,胜寒将会从面试官的角度来带大家一起分析,避免踩坑。运筹帷幄之中,决胜千里之外,我是高胜寒,今天我们一起聊聊“自我介绍”这个话题。自我介绍已经成了面试必问的题目,只要开始一场面试,面

基于C++的opencv(七)core组件_yang_jianfeng的博客-程序员宅基地

关于Mat类,首先需要知道的是:(1)不必再手动为其开辟空间;(2)不必再在不需要时立即将空间释放。Mat是一个类,有两个数据部分组成:矩阵头(包含矩阵尺寸、存储方法、存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同,矩阵可以是不同的维数)的指针。opencv使用引用计数机制,其思路是让每个Mat对象有自己的信息头,但共享同一个矩阵。这通过让矩阵指针指向同一个地址而实现。而拷贝构造函数则只复制信息头和矩阵指针,而不是复制矩阵。opencv函数中输出图像的内存分配是自动完成的

git分支管理_MINE小果阳光的博客-程序员宅基地

我们第一份实习工作刚开始受到最大的阻力就是git了,没工作之前以为自己基本的git是没问题的,最起码查看分支、状态、merge分支、提交分支是没问题,就自以为多人合作我ok了(因为大学里打比赛的组中就我一个前端,我把代码只有一个master分支都没问题、因为自己写代码没啥约束,也不严谨),但是到公司才发现,git是最基本的,也是重要的,但它足够让新入职的小白碰一鼻子灰!小白一定要好好看这篇文章(敲黑板!!)1、你接到一个新需求,就一定要新开一个分支,在这个新开的分支上对这个需求进行开发,具体方法:切到

jquery怎么样判断是否为空_无忧 小李的博客-程序员宅基地_jquery判断值是否为空

jquery判断是否为空的方法:1、使用undefined判断,代码为【if(C==null||C==undefined||C==""){//代码}】;2、判断长度大小,代码为【if(C.length==0){//代码}】。本教程操作环境:windows7系统、jquery3.2.1版本,该方法适用于所有品牌电脑。推荐:jquery视频教程jquery判断是否为空的方法:写校验时需要用到当input空中值不为空时,执行校验,代码如下12345678if($("#email").va

推荐文章

热门文章

相关标签