服务器之家

服务器之家 > 正文

python批量提取word内信息

时间:2020-07-29 12:01     来源/作者:脚本之家

单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个python小程序把所需的信息打印出来

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

#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

?

1

2

3

4

5

6

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系统下面,应当,

?

1

2

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.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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) #不要(),容易引起歧义。

 

 

标签:

相关文章

热门资讯

2022年最旺的微信头像大全 微信头像2022年最新版图片
2022年最旺的微信头像大全 微信头像2022年最新版图片 2022-01-10
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整 2021-08-24
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
暖暖日本高清免费中文 暖暖在线观看免费完整版韩国
暖暖日本高清免费中文 暖暖在线观看免费完整版韩国 2021-05-08
返回顶部