📜  通过Python-Docx模块在Python中读写MS Word文件

📅  最后修改于: 2020-08-22 03:11:33             🧑  作者: Mango

Microsoft Office套件中的MS Word实用程序是用于编写简单和复杂文本文档的最常用工具之一。尽管人们可以轻松地读写MS Word文档,但前提是您已安装Office软件,但通常您需要从另一个应用程序中的Word文档中读取文本。

例如,如果您正在使用Python 开发自然语言处理应用程序,以MS Word文件作为输入,则需要先使用Python读取MS Word文件,然后才能处理文本。同样,通常您需要将文本写到MS Word文档中作为输出,例如,它可以是动态生成的报告以供下载。

在本文中,您将看到如何在Python中读取和写入MS Word文件。

安装Python-Docx库

存在几个可用于在Python中读写MS Word文件的库。但是,由于其易用性,我们将使用python-docx模块。pip在终端中执行以下命令以下载python-docx模块,如下所示: 

pip install python-docx

使用Python-Docx模块读取MS Word文件

在本节中,您将看到如何通过python-docx模块从MS Word文件读取文本。

创建一个新的MS Word文件并将其重命名为“ my_word_file.docx”。我将文件保存在“ E”目录的根目录中,尽管您可以将文件保存在任何位置。my_word_file.docx文件应具有以下内容:

要读取上述文件,请首先导入docx模块,然后Documentdocx模块创建该类的对象。将my_word_file.docx的路径传递给该类的构造函数Document,如以下脚本所示:

import docx

doc = docx.Document("E:/my_word_file.docx")

Document类对象doc现在可以用来读取my_word_file.docx的内容。

阅读段落

Document使用文件路径创建该类的对象后,就可以通过paragraphs属性访问文档中的所有段落。空行也被读取为段落Document。让我们从my_word_file.docx中获取所有段落,然后显示文档中的段落总数:

all_paras = doc.paragraphs
len(all_paras)

输出:

10

现在,我们将迭代地打印my_word_file.docx文件中的所有段落:

for para in all_paras:
    print(para.text)
    print("-------")

输出:

-------
Introduction
-------

-------
Welcome to stackabuse.com
-------
The best site for learning Python and Other Programming Languages
-------
Learn to program and write code in the most efficient manner
-------

-------
Details
-------

-------
This website contains useful programming articles for Java, Python, Spring etc.
-------

输出显示Word文件中的所有段落。

我们甚至可以通过索引paragraphs属性(如数组)来访问特定段落。让我们在文件中打印第五段:

single_para = doc.paragraphs[4]
print(single_para.text)

输出:

The best site for learning Python and Other Programming Languages

阅读跑步

单词文档中的行是具有相似属性(如相似的字体大小,字体形状和字体样式)的连续单词序列。例如,如果您查看my_word_file.docx的第二行,其中包含文本“ Welcome to stackabuse.com”,此处的文本“ Welcome to”为纯字体,而文本“ stackabuse.com”为黑体。因此,文本“ Welcome to”被认为是一次运行,而黑体字“ stackabuse.com”被认为是另一次运行。

同样,“以最有效的方式编程和编写代码”和“以最有效的方式编写代码”在段落“以最有效的方式编写程序和代码”中被视为两个不同的运行。

要获取段落中的所有运行,可以使用对象run属性的paragraph属性doc

让我们阅读文本中第5段(第4个索引)的所有运行:

single_para = doc.paragraphs[4]
for run in single_para.runs:
    print(run.text)

输出:

The best site for
learning Python
 and Other
Programming Languages

以相同的方式,以下脚本将打印my_word_file.docx文件第6段中的所有运行:

second_para = doc.paragraphs[5]
for run in second_para.runs:
    print(run.text)

输出:

Learn to program and write code in the
most efficient manner

使用Python-Docx模块编写MS Word文件

在上一节中,您了解了如何使用该python-docx模块在Python中读取MS Word文件。在本节中,您将看到如何通过python-docx模块写入MS Word文件。

要编写MS Word文件,您必须Document使用空的构造函数创建类的对象,或者不传递文件名。

mydoc = docx.Document()

撰写段落

要编写段落,可以使用类对象的add_paragraph()方法Document。添加段落后,您将需要save()Document类对象上调用方法。您要向其写入段落的文件的路径作为参数传递给该save()方法。如果该文件尚不存在,则将创建一个新文件,否则该段落将被添加到现有MS Word文件的末尾。

以下脚本将一个简单的段落写入名为“ my_writer_file.docx”的新创建的MS Word文件中。

mydoc.add_paragraph("This is first paragraph of a MS Word file.")
mydoc.save("E:/my_written_file.docx")

一旦执行了上面的脚本,您应该在save()方法中指定的目录中看到一个新文件“ my_write_file.docx” 。在文件内部,您应该看到一个段落,上面写着“这是MS Word文件的第一段”。

让我们在my_writing_file.docx中添加另一个段落:

mydoc.add_paragraph("This is the second paragraph of a MS Word file.")
mydoc.save("E:/my_written_file.docx")

第二段将添加到my_write_file.docx中现有内容的末尾。

写作奔跑

您也可以使用该python-docx模块编写运行。要编写运行,首先必须为要添加运行的段落创建句柄。看下面的示例,看它是如何完成的:

third_para = mydoc.add_paragraph("This is the third paragraph.")
third_para.add_run(" this is a section at the end of third paragraph")
mydoc.save("E:/my_written_file.docx")

在上面的脚本中,我们使用类对象的add_paragraph()方法编写了一个段落。该方法返回新添加的段落的句柄。要将运行添加到新段落,您需要在段落句柄上调用方法。运行的文本以字符串形式传递给方法。最后,您需要调用该方法来创建实际文件。Documentmydocadd_paragraph()add_run()add_run()save()

写作标题

您还可以将标题添加到MS Word文件。为此,您需要调用该add_heading()方法。该add_heading()方法的第一个参数是标题的文本字符串,第二个参数是标题大小。标头大小从0开始,其中0是顶级标头。

以下脚本将级别0、1和2的三个标头添加到文件my_write_file.docx中:

mydoc.add_heading("This is level 1 heading", 0)
mydoc.add_heading("This is level 2 heading", 1)
mydoc.add_heading("This is level 3 heading", 2)
mydoc.save("E:/my_written_file.docx")

添加图像

要将图像添加到MS Word文件,可以使用该add_picture()方法。图像的路径作为参数传递给add_picture()方法。您也可以使用docx.shared.Inches()属性指定图像的宽度和高度。以下脚本将本地文件系统中的图像添加到my_write_file.docx Word文件中。图像的宽度和高度分别为5英寸和7英寸: 

mydoc.add_picture("E:/eiffel-tower.jpg", width=docx.shared.Inches(5), height=docx.shared.Inches(7))
mydoc.save("E:/my_written_file.docx")

在执行本文的“使用Python-Docx模块编写MS Word文件”部分中的所有脚本之后,最终的my_write_file.docx文件应如下所示:

在输出中,您可以看到添加到MS Word文件的三个段落,以及三个标题和一个图像。

结论

本文简要概述了如何使用该python-docx模块读取和写入MS Word文件。本文介绍如何阅读段落并从MS Word文件中运行。最后,本文介绍了编写MS Word文件,向MS Word文件添加段落,运行,标题和图像的过程。