2013-11-02 5 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 с КК и т.д.

Я, конечно, могут сделать это путем повторения кода выше во много раз.

Но я думаю, что это займет много времени, особенно когда input.txt большой.

Как я могу сделать это элегантно?

Выделено

Мой вход не только ул ABCD.

Мне нужно использовать input.txt в качестве входных данных, и я хочу заменить все вхождения A в input.txt на A ', каждое вхождение в input.txt из B в BB, каждое вхождение C в input.txt в CX, каждое вхождение D в input.txt в 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

ли это с помощью STRs в качестве входных данных? Мне нужно использовать input.txt в качестве входных данных, и я хочу заменить все вхождения A в input.txt на A ', каждое вхождение в input.txt от B до BB, каждое вхождение C в input.txt в CX, каждое появление от D в input.txt до 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." 
Смежные вопросы