0

我做了以下更换。

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

但我想做很多替换。

用 A' 代替 A,用 BB 代替 B,用 CX 代替 C,用 KK 代替 D,等等。

我当然可以通过多次重复上述代码来做到这一点。

但我想这会消耗很多时间,尤其是当 input.txt 很大时。

我怎样才能优雅地做到这一点?

强调添加

我的输入不仅仅是 str ABCD。

我需要使用 input.txt 作为输入,并且我想将 input.txt 中出现的每个 A 替换为 A',将 input.txt 中出现的 B 替换为 BB,将 input.txt 中出现的每个 C 替换为 CX,每次出现input.txt 中的 D 到 KK。

4

2 回答 2

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"
于 2013-11-02T12:30:35.063 回答
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."
于 2013-11-02T12:31:59.433 回答