2011-09-29 109 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)