我编写了一个Python脚本,它迭代特定目录中的所有文件。它以只读模式打开文件,从XML文件中查找特定字符串,并相应地替换它们
问题是,例如,如果我想将“icon.png”更改为“bear.png”,脚本也将在“professional”
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()
list.xml:
<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)
更改为pattern = re.match(find, replace)
,但似乎根本不起作用。是否有办法更改此脚本,使其仅适用于精确匹配
任何帮助都将不胜感激
似乎只有在匹配前面紧跟着非单词字符或字符串开头时才需要进行替换。因此:
用作正则表达式:
然后应该使用正则表达式替换:
您还应该关闭输入文件
相关问题 更多 >
编程相关推荐