尝试在文本文件内容上使用通配符在python中进行搜索/替换:
如果文本文件的内容如下:
"all_bcar_v0038.ma"; "all_bcar_v0002.ma"; "all_bcar_v0011.ma"; "all_bcar_v0011.ma";
希望用v1000替换所有版本号来获取此信息:
"all_bcar_v1000.ma"; "all_bcar_v1000.ma"; "all_bcar_v1000.ma"; "all_bcar_v1000.ma";
将文件写出来。
我已尝试过以下内容,但会发生的情况是脚本只捕获第一个版本号,而其他版本号保持不变:
def replaceAll(file,searchExp,replaceExp):
for line in fileinput.input(file, inplace=1):
if searchExp in line:
line = line.replace(searchExp,replaceExp)
sys.stdout.write(line)
rigs = ['all_bcar']
rigs_latest = ['all_bcar_v1000']
old_pattern = []
old_compiled = []
old = []
old_version = []
for rig in range(len(rigs)):
old_pattern.append("/" + rigs[rig] + "_(.*).ma")
fin = open(txt_file, "r")
old_compiled.append(re.compile(old_pattern[rig]))
old.append(old_compiled[rig].search(fin.read()))
old_version.append(old[rig].group(1).strip())
old_rig = (rigs[rig] + "_" + old_version[rig])
replaceAll(txt_file,old_rig,rigs_latest[rig])
fin.close()
不确定如何保持搜索循环以查找其他版本并避免已经替换的版本,跳过任何等于“v1000”的版本。
答案 0 :(得分:5)
使用regexes可以大大改善你的生活。您应该可以在两行中执行此操作(假设我正确理解了问题):
import re
for line in fileinput.input(file, inplace=1):
re.sub(r"_v\d{4}", "_v1000", line)
答案 1 :(得分:0)
尝试 -
import re
re.sub("_v\d{4}", "_v1000.", string)