【Python3 爬虫学习笔记】用Python进行Word文件操作

用Win32com组件操作Word文件

Python语言可通过Win32com组件对Microsoft Office文件进行存取,而且Python已内置了Win32com组件,不需要另外安装。
要用Win32com组件操作Microsoft Office文件,计算机必须已确保安装了Microsoft Office软件。

实现新建文件并保存

Win32com组件不需要安装,直接导入就可使用,下面我们先导入Win32com组件的client模块:

from win32com import client

要处理Word文件,需先创建Word应用程序变量。语法为:

应用变量 = client.gencache.EnsureDispatch('Word.Application')

例如,建立一个名为word的Word应用程序变量:

word = client.gencache.EnsureDispatch('Word.Application')

Word应用程序变量的Visible、DisplayAlerts属性及Documents方法:

  • Visible:1表示要显示Word界面,0表示不显示Word界面。
  • DisplayAlerts:1表示要显示Word警告信息,0表示不显示Word警告信息。
  • Documents:操作Word文件,如打开文件、保存文件等。
新建文件

用Win32com组件新建文件是通过Documents的Add()方法来实现,语法为:

文件变量 = 应用变量.Documents.Add()

例如,新建一个文件,并保存至变量doc:

doc = word.Documents.Add()

文件内容的位置可通过文件变量的Range()方法来设置,语法为:

范围变量 = 文件变量.Range(起始位置, 结束位置)

起始位置及结束位置为整数,表示字符的起始及结束位置。例如,把文件前10个字符保存至range1变量:

range1 = doc.Range(0, 9)

向Word文件中插入文本可通过两种方法来实现。一种方法是通过InsertAfter()方法,此方法把文字插入到范围变量结束位置之后,执行插入操作以后,位置变量的结束值会变为所插入的内容后的位置值,语法为:

范围变量.InsertAfter(文字)

另一种方法是通过InsetBefore()方法,此方法是将文字插入到范围变量起始位置的前面,语法为:

范围变量.InsertBefore(文字)

使用InsertBefore()方法插入文本后不会改变范围变量的起位置起始值,再次使用InsertBefore方法时,还是会把文字插入到变量最初起始位置值之前。

保存文件

本案例的Word文件位于media文件夹中(media文件夹与.py文件位于同一目录中)。由于Win32com组件存取文件时不能使用相对路径,所以必须先取得Python程序文件所在路径(即media文件夹的路径),语法为:

import os
路径变量 = os.path.dirname(__file__)

保存Word文件的语法为:

文件变量.SaveAd(路径变量)

例如,把文件保存在media文件夹中,文件名为test1.docx:

cpath = os.path.dirname(__file__)
doc.SaveAs(cpath + "\\media\\test1.docx")

处理完Word文件,通常会在程序最后关闭Word文件及应用,以免占用系统资源,语法为:

文件变量.Close()
应用变量.Quit()

实战:新建Word文件并存盘

用Win32com组件新建Word文件,插入内容后存盘。

import os
from win32com import client
word = client.gencache.EnsureDispatch('Word.Application')
word.Visible = 1
word.DisplayAlerts = 0
doc = word.Documents.Add()
range1 = doc.Range(0, 0)   # 设置范围变量的起止位置
range1.InsertAfter("这是测试第一行\n这是测试第二行\n")
range1.InsertAfter("这是测试第三行\n这是测试第四行\n")
range1.InsertBefore("第一次插入到文件最前方\n")
range1.InsertBefore("再次插入到文件最前方\n")
cpath = os.path.dirname(__file__)
doc.SaveAs(cpath + "\\media\\test1.docx")
# doc.Close()
# doc.Quit()

打开文件并显示文件内容

Win32com组件是通过Documents的Open()方法来实现打开文件的,语法为:

文件变量 = 应用变量.Documents.Open(文件路径)

例如,打开刚才保存的test1.docx文件,文件变量名为doc:

doc = word.Documents.Open(cpath + "\\media\\test1.docx")

获取文件内容的方法有两种,第一种较为简单,用文件变量的Content属性即可获取全部内容,语法为:

文件变量.Content

例如,通过下面代码可在命令窗口中显示doc文件变量的内容:

print(doc.Content)

第二种获取文件内容的方法是先取得所有段落,在通过循环来显示段落内容。取得所有段落的语法为:

段落集合变量 = 文件变量.Paragraphs

例如,取得所有段落内容并保存在paragraphs集合变量中:

paragraphs = doc.Paragraphs

通过循环显示段落内容的代码为:

for p in paragraphs:
    text = p.Range.Text.strip()
    print(text)

其中,"p.Range.Text"代码用于实现段落内容的读取,其后的strip()方法用于实现换行符的删除,执行结果与第一种方法相同。

你可能感兴趣的:(Python3爬虫学习笔记)