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
答
您read()
从each_targ
但你没有任何地方存储字符串。
相反,您将文件句柄each_targ
改为.sub
并导致类型不匹配。你可以只说:
findtargetID = re.sub('id="\w{3}\d{13}"',str(IDtoreplace), each_targ.read())
请帮助我今天需要完成它:(:(:( – MaciejPL