使用文档

python-docx 允许您创建新文档以及对现有文档进行更改。实际上,它只允许您对现有文档进行更改;只是如果您从一个没有任何内容的文档开始,一开始可能会觉得您是在从头开始创建文档。

这是一个强大的特点。文档的外观很大程度上取决于删除所有内容时剩余的部分。样式、页眉和页脚等内容与主内容分开包含,允许您在开始文档中进行大量自定义,然后这些文档将显示在您生成的文档中。

让我们逐步介绍创建文档的步骤,一次创建一个示例,从文档的两个主要操作开始,打开并保存文档。

打开文档

最简单的方法是打开一个新文档,而不指定要打开的文件:

from docx import Document

document = Document()
document.save('test.docx')

这将从内置的默认模板创建一个新文档,并将其原封不动地保存到名为“”的文件中测试.docx'. 所谓的“默认模板”实际上只是一个没有内容的Word文件,与安装的 python-docx 包裹。这和你通过选择 Word文档 选择单词后的模板 File > New from Template... 菜单项。

真的要打开文档吗

如果希望对最终文档有更多的控制权,或者要更改现有文档,则需要打开一个具有以下文件名的文档:

document = Document('existing-document-file.docx')
document.save('new-file-name.docx')

注意事项:

  • 您可以用这种方式打开任何Word 2007或更高版本的文件(.Word 2003及更早版本的文档文件将无法工作)。虽然您可能还不能操作所有的内容,但是已经在其中的任何内容都可以很好地加载和保存。功能集仍在构建中,因此您还不能添加或更改标题或脚注之类的内容,但是如果文档中有它们 python-docx 有礼貌地让他们独处,聪明到在不了解他们是什么的情况下拯救他们。

  • 如果使用相同的文件名打开和保存文件, python-docx 将顺从地重写原始文件而不必偷看。你要确保这是你想要的。

打开“类似文件”的文档

python-docx 可以从所谓的 file-like 对象。它也可以保存到类似文件的对象。当您希望通过网络连接或从数据库获取源文档或目标文档,并且不想(或不允许)与文件系统交互时,这会非常方便。实际上,这意味着您可以传递一个打开的文件或StringIO/BytesIO流对象来打开或保存文档,如下所示:

f = open('foobar.docx', 'rb')
document = Document(f)
f.close()

# or

with open('foobar.docx', 'rb') as f:
    source_stream = StringIO(f.read())
document = Document(source_stream)
source_stream.close()
...
target_stream = StringIO()
document.save(target_stream)

这个 'rb' 并非所有操作系统都需要文件打开模式参数。它默认为 'r' 有时这已经足够了,但是在Windows和至少一些Linux版本上需要使用“b”(选择二进制模式)才能允许Zipfile打开文件。

好的,你有一个文件打开了,你很确定你可以把它保存在某处。下一步是在那里获取一些内容。。。