python多对多word模板_Python对word文档重排版

编写代码

本质上来讲,实现就是从源文档中取出一段文字进行处理操作,然后保存到目标文档。

其中,需求1,3,5的实现,只需要判断一下取出的内容是否是需要删除的内容,如果是,则不用保存到目标文档中,这样就实现了“间接删除”。

对于需求2的实现,通过观察我们不难发现,序号后面总有一个". ",所以我们只需要获取到这个的坐标,把前面的错误序号删除,插入正确的序号到处理字符串,最后保存到新文档,这样就完成了“修正题目序号”。

需求4的实现类似需求2,只需要找到 “、” 符号就行,然后进行类似操作,就能实现 “合并两行”。

from docx import Document

# 判断字符串是否为数字

def is_number(s):

try:

float(s)

return True

except ValueError:

pass

try:

import unicodedata

unicodedata.numeric(s)

return True

except (TypeError, ValueError):

pass

return False

# 修正错误题目序号

# src,源字符串 nPos,序号结束下标 cnt,正确序号

def changeNum(src,nPos,cnt):

s = src[:0] + src[nPos:]

str_list = list(s)

str_list.insert(0, str(cnt))

dest = ''.join(str_list)

return dest

# 源文档

srcdocx = Document('src.docx')

# 目标文档

outDocx = Document()

idx = 0 # 遍历下标

length = len(srcdocx.paragraphs) # 总段落数

cnt = 1 # 遍历序号

sum = 1 # 修改总次数

while(1):

if idx >= length:

break

src = srcdocx.paragraphs[idx].text

# 实现需求1,3,5

if((src == "窗体底端") or (src =="窗体顶端") or (src == "") or (is_number(src))) :

print(f"正在修改第{sum}处错误 {src}")

sum = sum + 1 # 计算修改的次数

idx = idx + 1

continue

# 实现需求2

nPos1 = src.find(".")

if nPos1 != -1 :

# 查找到有序号的行

dest = changeNum(src,nPos1,cnt)

print(f"正在修改第{sum}处错误 {src}")

sum = sum + 1 # 计算修改的次数

cnt = cnt + 1 # 序号后移

outDocx.add_paragraph(dest) # 写入数据到新word

# 实现需求4

nPos2 = src.find('、')

if nPos2 != -1 :

src2 = srcdocx.paragraphs[idx+1].text

outDocx.add_paragraph(src+src2)

idx = idx + 1

print(f"正在修改第{sum}处错误 {src},{src2}")

sum = sum + 1 # 计算修改的次数

idx = idx + 1

outDocx.save('out.docx')

print(f"修改完成!共计{sum}个错误!")

运行效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值