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

2024-05-16 04:49:23 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试在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”的版本。


Tags: in版本号linealloldfilepatternrig
2条回答

尝试-

import re

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

使用regexes可以大大改善您的生活。您应该能够在两行中完成此操作(假设我正确理解问题):

import re

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

相关问题 更多 >