起因,还是这两天领导下发的一类任务——将内部文件其中的关键工艺参数进行隐藏。那我能让领导失望吗?我用我的肉眼酷酷干,后面眼睛生疼。等到结束以后我就想可以用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')