直接删除指定页码的方法暂时还为解决,因为用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)