Python:用正则表达式替换字符串

问题描述:

我的问题在于我有大量的文件。每个xml文件都包含ID。我有一组源文件和目标文件。源文件具有名称A和ID = B。目标文件具有名称B和ID = B 我需要做的是将源ID B与目标名称B匹配,然后用源名称A替换目标ID = B。希望其清除Python:用正则表达式替换字符串

这里是我的代码

import os 
import re 

sourcepath = input('Path to source folder:\n') 
targetpath = input('Path to target folder:\n') 
for root,dir,source in os.walk(sourcepath): 
    for each_file in source: 
     os.chdir(root) 
     correctID = each_file[:16] 
     each_xml = open(each_file, 'r', encoding='utf8').read() 
     findsourceID = re.findall('id="\w{3}\d{13}"', each_xml) 
     StringID = str(findsourceID) 
     correctFilename = StringID[6:22] 
     IDtoreplace = 'id="' + correctID + '"' 
     print(IDtoreplace) 
     for main,folder,target in os.walk(targetpath): 
      for each_target in target: 
       os.chdir(main) 
       targetname = each_target[:16] 
       if targetname == correctFilename: 
        with open(each_target, 'r+', encoding='utf8') as each_targ: 
         each_targ.read() 
         findtargetID = re.sub('id="\w{3}\d{13}"',str(IDtoreplace), each_targ) 
         each_targ.close() 

这里是错误

File "C:/Users/ms/Desktop/Project/test.py", line 23, in <module> 
    findtargetID = re.sub('id="\w{3}\d{13}"',str(IDtoreplace), each_targ) 
    File "C:\Users\ms\AppData\Local\Programs\Python\Python35\lib\re.py", line 182, in sub 
    return _compile(pattern, flags).sub(repl, string, count) 
TypeError: expected string or bytes-like object 
+0

请帮助我今天需要完成它:(:(:( – MaciejPL

read()each_targ但你没有任何地方存储字符串。

相反,您将文件句柄each_targ改为.sub并导致类型不匹配。你可以只说:

findtargetID = re.sub('id="\w{3}\d{13}"',str(IDtoreplace), each_targ.read()) 
+0

是的,它不叫错误,但不保存文件我的意思是一切如故 – MaciejPL

+0

我什么。做错了该文件不想保存 – MaciejPL

+0

我做了这样的事情,但它增加了文本,而不是编辑 targetID =(re.sub(r'id =“\ w {3} \ d {13}”',strtarget, each_targ.read()) each_targ.write(targetID) each_targ.close() – MaciejPL