我写了一个Python脚本来遍历特定目录中的所有文件。它以只读模式打开文件,从XML文件中查找特定的字符串,并相应地替换它们。
问题是,例如,如果我要将“ icon.png ”更改为“ bear.png ”,则该脚本也可以在“ professional_ icon.png ”,并将其替换为“ professional_ bear.png ”-这不是我想要实现的目标。
<Style TargetType="{x:Type TreeViewItem}">
list.xml :
import sys
import re
import os
import shutil
import xml.etree.cElementTree as ET
drc = '/home/user/Desktop/Convert_here'
backup = '/home/user/Desktop/Rename_icons/tmp_backup'
tree = ET.parse('list.xml')
root = tree.getroot()
records = []
for child in root:
find = child.find('FINDEXACT').text
replace = child.find('REPLACEEXACT').text
records.append((find, replace))
pattern = re.compile(find)
for dirpath, dirname, filename in os.walk(drc):
for fname in filename:
path = os.path.join(dirpath, fname)
strg = open(path).read()
if re.search(pattern, strg):
print path, strg
shutil.copy2(path, backup)
strg = strg.replace(find, replace)
f = open(path, 'w')
f.write(strg)
f.close()
我尝试将<SEARCH>
<SEARCHFOR>
<FINDEXACT>icon.png</FINDEXACT>
<REPLACEEXACT>bear.png</REPLACEEXACT>
</SEARCHFOR>
<SEARCHFOR>
<FINDEXACT>professional_icon.png</FINDEXACT>
<REPLACEEXACT>wolf.png</REPLACEEXACT>
</SEARCHFOR>
</SEARCH>
更改为pattern = re.compile(find)
,但似乎根本不起作用。有没有办法更改此脚本,使其仅适用于完全匹配?
任何帮助将不胜感激。
答案 0 :(得分:1)
看来,您只希望在匹配之后紧跟一个非单词字符或字符串的开头进行替换。所以:
用作正则表达式:
find = r'\b' + child.find('FINDEXACT').text
然后您应该使用正则表达式替换:
strg = pattern.sub(replace, strg)
您还应该关闭输入文件。