2011-09-29 68 views
0

试图做一个搜索/使用通配符上的文本文件的内容在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”的版本。

回答

3

使用regexes可以大大提高您的生活质量。你应该能够做到这一点在2线(假设我理解正确的问题):

import re 

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

哇,我是浪费了大量的线条。谢谢! – user971701

0

尝试 -

import re 

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