使用通配符在文本文件中搜索和替换字符串

1 投票
2 回答
9241 浏览
提问于 2025-04-17 03:22

我想在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”的版本。

2 个回答

0

试试这个 -

import re

re.sub("_v\d{4}", "_v1000.", string)
6

使用正则表达式可以大大改善你的生活。你应该能用两行代码解决这个问题(假设我理解得没错):

import re

for line in fileinput.input(file, inplace=1):
  re.sub(r"_v\d{4}", "_v1000", line)

撰写回答