繁体   English   中英

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

[英]Python: replace string with regex

我的问题是我有大量文件。 每个xml文件都包含ID。 我得到了一组源文件和目标文件。 源文件的名称为A,ID =B。目标文件的名称为B,ID = B。我需要做的是将源ID B与目标名称B匹配,然后用源名称A替换目标ID = B。

这是我的代码

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 read() ,但是不会将字符串存储在任何地方。

相反,您将文件句柄each_targ.sub ,这在此处导致类型不匹配。 您可以说:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM