直接删除指定页码的方法暂时还为解决,因为用docx库获取底部页码有点难度。

1.思路

但是,可以换个思路,

        在开始页码的一行插入一个尽可能长的开始字符串(长一点避免识别错误,代码中的开始关键字),

        在结尾页码的最后一行插入一个尽可能长的结束字符串(长一点避免识别错误,代码中的结束关键字),

        然后删除两个字符串之间的内容,就相当于删除了指定页码内的内容。

2.适用情况

2.1.文档内容较多、文档个数较少时可以采用这种方式来处理:在文档中手动插入开始与结束字符串,然后运行代码。

2.2.文档个数较多时,可以考虑其他方法。

3.代码

下面代码仅供参考。

# 删除docx中指定关键字之间的内容
from docx import Document
import re

# 删除段落函数
def delete_paragraph(paragraph):
    p = paragraph._element
    p.getparent().remove(p)
    p._p = p._element = None

# 寻找字符并删除:若已知起始段,可直接改range的其起始段
def delete_content_between(doc, start_keyword, end_keyword):

    # 段落序号:i
    # 删除段落个数
    k = 0
    # 遍历文档的所有段落
    for i in range(0,len(doc.paragraphs)):
        # 如果已经完成删除工作,则退出寻找
        if k>0:
            break
        # 显示当前遍历的段落序号
        print('当前遍历段落序号:',i)
        paragraph = doc.paragraphs[i]
        # 获取段落文本内容
        text = paragraph.text

        # 使用正则表达式匹配起始关键字
        start_match = re.search(re.escape(start_keyword), text)

        if start_match:
            # 输出起始段落的信息
            print('起始关键字段落序号:',i)

            # 删除跨越多个段落的内容
            while True:
                # 统计并输出删除的段落个数
                k+=1
                print('已经删除段落个数:',k)
                # 获取起始关键字的段落
                next_paragraph = doc.paragraphs[i]
                next_text = next_paragraph.text
                # 寻找结束关键字的段落:找到则退出
                if re.search(re.escape(end_keyword), next_text):
                    # 删除含有结束关键字的段落
                    delete_paragraph(doc.paragraphs[i])
                    break
                #没有结束则删除段落:下一段段落序号会顶上来,所以段落序号i不用变
                else:
                    delete_paragraph(doc.paragraphs[i])

    # 保存修改后的文档
    doc.save('output.docx')


# 打开 Word 文档
doc = Document('11.docx')

# 指定要删除的内容之间的关键字
# 开始关键字
start_keyword = 'start'
# 结束关键字
end_keyword = 'end123456789'

# 删除指定关键字之间的内容
delete_content_between(doc, start_keyword, end_keyword)