2013-11-02 74 views
0

我按照以下步驟進行替換。python中的多重替換

import fileinput 
for line in fileinput.FileInput("input.txt",inplace=1): 
    line = line.replace("A","A'") 
    print line, 

但我想做很多替換。

與BB,C與CX,d與KK等

A替換爲A」,B當然,我可以做到這一點通過重複上述代碼多次。

但我想這會消耗大量的時間,特別是當input.txt很大時。

我該如何優雅地做到這一點?

着重強調

我輸入不只是一個海峽ABCD。

我需要使用input.txt作爲輸入,並且我想將input.txt中的每一個A都替換爲A',在B的input.txt中的每一個出現都到BB,在input.txt中每次出現C CX,input.txt中每個出現的D到KK。

回答

4

使用映射詞典:

>>> map_dict = {'A':"A'", 'B':'BB', 'C':'CX', 'D':'KK'} 
>>> strs = 'ABCDEF' 
>>> ''.join(map_dict.get(c,c) for c in strs) 
"A'BBCXKKEF" 

在Python3使用str.translate代替str.join

>>> map_dict = {ord('A'):"A'", ord('B'):'BB', ord('C'):'CX', ord('D'):'KK'} 
>>> strs = 'ABCDEF' 
>>> strs.translate(map_dict) 
"A'BBCXKKEF" 
+0

是使用可疑交易報告的輸入呢?我需要使用input.txt作爲輸入,並且我想將input.txt中的每個A都替換爲A,每個出現在B到BB的input.txt中的每一個事件,input.txt中每次出現的C到CX,每次出現將input.txt中的D轉換爲KK。 – user1849133

+0

@ user2604484然後只需使用從input.txt中讀取的文本而不是'strs'。 –

+0

嗯,我很抱歉,但我剛開始學習python,你可以在答案中編輯代碼來編寫所需的全部更改,包括「從input.txt讀取」? – user1849133

1

使用正則表達式:

>>> import re 
>>> 
>>> replace_map = { 
... 'A': "A'", 
... 'B': 'BB', 
... 'C': 'CX', 
... 'D': 'KK', 
... 'EFG': '.', 
... } 
>>> pattern = '|'.join(map(re.escape, replace_map)) 
>>> re.sub(pattern, lambda m: replace_map[m.group()], 'ABCDEFG') 
"A'BBCXKK."