遍历目录及其文件内容。查找并替换完全匹配

时间:2020-10-28 12:35:33

标签: python regex

我写了一个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),但似乎根本不起作用。有没有办法更改此脚本,使其仅适用于完全匹配?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

看来,您只希望在匹配之后紧跟一个非单词字符或字符串的开头进行替换。所以:

用作正则表达式:

find = r'\b' + child.find('FINDEXACT').text

然后您应该使用正则表达式替换:

strg = pattern.sub(replace, strg)

您还应该关闭输入文件。