我试图编写一个Python脚本来查找目录树中的所有.py文件,并进行以下替换:
myAppl.Variable(VDC).Read() - > MAPort.Read(Model.VDC)。价值
但目前的结果如下:
myAppl.Variable(VDC).Read() - > MAPort.Read(Model.DC)。价值
为什么我的变量的第一个字母被删除了,我做错了什么?
mypath = "P:\\myTest"
fnames = []
for root, subFolders, files in os.walk(mypath):
for file in files:
if file.endswith(".py"):
fnames.append(root + '\\' + file)
for fname in fnames:
with open(fname) as reader:
data = reader.read()
data = re.sub(r'(myAppl.Variable\(.(.+)\).Read\(\))',
r'MAPort.Read(Model.\2).Value', data)
with open(fname, 'w') as writer:
writer.write(data)
答案 0 :(得分:2)
(
之后的最合适的字符与此部分匹配的点:\(.
删除点。您还需要转义应该与文字句点符号匹配的点。
使用
r'myAppl\.Variable\(([^()]*)\)\.Read\(\)'
并替换为r'MAPort.Read(Model.\1).Value'
。
import re
rx = r"myAppl\.Variable\(([^()]*)\)\.Read\(\)"
s = "myAppl.Variable(VDC).Read()"
result = re.sub(rx, r"MAPort.Read(Model.\1).Value", s)
print(result)
# => MAPort.Read(Model.VDC).Value