python-word数据批量替换

起因,还是这两天领导下发的一类任务——将内部文件其中的关键工艺参数进行隐藏。那我能让领导失望吗?我用我的肉眼酷酷干,后面眼睛生疼。等到结束以后我就想可以用python写个小脚本script。

上班没事的时候写了一下,下面的代码依然有许多问题。

总结了一下现阶段问题:1.有些单位无法识别,例如:所有°,部分‘层’和±;2.表格内的0未被替换;3.未能很好的限制替换的页数范围,一些代码被局部替换了……

这一版本为1.0,我希望大家在交流的时候能给我些建议和意见。我会在自己的生活工作积极应用计算机,与大家分享;互联网精神永存。

# 导入模块
from docx import Document
import docx #word文档的处理
import re #正则表达

# 创建doc对象

docx = docx.Document("C:\\Users\\Administrator\\Desktop\\testa.docx")#自改
text = ""

for paragraph in docx.paragraphs[113:200]:#限制正则表达式匹配范围
    text += paragraph.text


print(type(text))

#这是互联网上copy来的,但我懒得找链接了,互联网精神永存(默念)
def replace_word(doc, old_word, new_word):
    for p in doc.paragraphs:  # 遍历文档段落
        for run in p.runs:  # 遍历段落的字块
            run.text = run.text.replace(old_word, new_word)  # 替换

# 遍历文档的表格, 替换表格里的要替换的文字
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                cell.text = cell.text.replace(old_word, new_word)

def table_replace_word(doc, ow, nw):
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                cell.text = cell.text.replace(ow, nw)

doc = Document('C:\\Users\\Administrator\\Desktop\\testa.docx')

#只要确定单位就能用正则表达式获取ow;自改哦
dw = ['bar','mm','ms','℃','°C','%','°','h','pcs','N','层','layers','组','sets','支','pieces','范围']

#因为没有办法直接一个正则表达式涵盖,就分了几部分1.有单位的范围 2.有单位的纯数 3.无单位分数 4.表格内纯数 5.无单位的纯范围
print('range begin')
for z in dw:
    print(z)
    f = re.compile(r'(-?\d+\.?\d*\s?[-|±]\s?-?\d+\.?\d*\s?{})'.format(re.escape(z)))#A.范围
    x = f.findall(text)
    print(x)
    for ow in x:
        replace_word(doc, ow, 'HI '+z)
        table_replace_word(doc, ow, 'HI '+z)

print('data begin')
for z in dw:
    X = re.compile(r'(-?\d+\.?\d*\s?{})'.format(re.escape(z)))#B.小数和整数
    x = X.findall(text)
    print(x)
    for ow in x:
        replace_word(doc, ow, 'HI'+z)
        table_replace_word(doc, ow, 'HI'+z)

print('分数 begin')
f = re.compile(r'(-?\d+\/\d+)')#C.分数
x = f.findall(text)
print(x)
for ow in x:
    replace_word(doc, ow, 'HI ')
    table_replace_word(doc, ow, 'HI'+z)

print('Pure number in cells')
f = re.compile(r'(-?\d+\.?\d+\s?)')#C.表格内纯数
for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            text = cell.text
            ow = str(text)
            x = f.fullmatch(ow)
            print(ow)
            print(x)
            if x != None:
                table_replace_word(doc, ow, 'HI')

print(z)
f = re.compile(r'(-?\d+\.?\d*\sto\s-?\d+\.?\d*\s?)')#D.纯范围
x = f.findall(text)
print(x)
for ow in x:
    replace_word(doc, ow, 'HI')
    table_replace_word(doc, ow, 'HI')


doc.save('new_文档2.docx')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值