添加分页符后如何删除不需要的额外空行?

How do I remove unwanted additional empty lines after adding page break?

我正在尝试使用 python docx 模块重新格式化 this .docx 文档。每个问题都以特定的表达方式“-- ans end --”结尾。我想在表达式后插入一个分页符,代码如下:

import docx, re
from pathlib import Path
from docx.enum.text import WD_BREAK

filename = Path("DOCUMENT_NAME")
doc = docx.Document(filename)
for para in doc.paragraphs:
    match = re.search(r"-- ans end --", para.text)
    if match:
        run = para.add_run()
        run.add_break(WD_BREAK.PAGE)

每个分页符后似乎有 2

我试图删除的是:

para.text = para.text.strip("\n")

在添加分页符之前剥离空行没有任何作用,而在添加分页符之后剥离空行会删除分页符。

请告诉我如何消除或避免添加 2 个空行。谢谢。

更新: 分页符应添加到下一个 paragraph/section 的开头而不是 -- ans end -- 之后(本节的结尾),因为分页符在添加到段落末尾时会创建一个新行(在 Word 上试试)。因此我使用了这个:

run = para.runs[0]
run._element.addprevious(new_run_element)
new_run = Run(new_run_element, run._parent)
new_run.text = ""
new_run.add_break(WD_BREAK.PAGE)

改为在下一段的开头添加分页符,这不会创建新行。

你有没有看过修改前后的文档内容?例如

for para in doc.paragraphs:
    print(repr(para.text))    # the call to repr() makes your `\n`s show up

这有助于弄清楚发生了什么。

在更改文档之前,没有 \ns 和 --- ans end --s,因此在添加分页符之前删除空行没有任何作用是有道理的。此外,在剥离您的文档之前,-- ans end --:

之后的段落中有一个空字符串
'-- ans --'
'-- ans end --'
''

是编辑文档之前的样子。 (除了有一种情况 -- ans end -- 后面跟着 两个 ,这与其他所有情况都非常不同。)

编辑文档后,这些部分如下所示。

'-- ans end --\n'
''

当我 运行 这段代码时,正如我在上面的评论中提到的,分页符实际上出现在错误的位置 - 就在 --ans end -- 之后而不是之前。我认为这可以通过一种相当直接的方式解决,如果您也遇到了这个问题,我会把它留给您。

如果您删除那些 '' 段落,我认为这可以解决您的问题。从文档中删除一段很烦人,但请参阅 this GitHub answer 了解执行此操作的咒语。