Python用不同的变量替换连续的字母

时间:2017-03-11 17:30:43

标签: python python-3.x replace counting

我希望有一个简单的问题。我只是想弄清楚要使用的正确功能。我想用不同的变量替换重复的字符,具体取决于它连续重复的次数。

with open("text1.txt","r") as File:

    for line in File:
        Counting = line.count('a')
        if Counting == 1:
            Line1 = line.replace('a', '1')
            print(Line1)
        elif Counting == 2:
            Line1 = line.replace('aa', '2')
            print(Line1)

所以,如果'a'连续重复3次,我想用'aaa'替换为3,依此类推,直到9。问题是,无论是否连续,计算它们都是计数。如果我一次读取2个字符或3个字符的行,则将其删除。任何想法或帮助请。

2 个答案:

答案 0 :(得分:0)

如果您想分析/替换连续的字母组,那么itertools.groupby可能会引起关注。下面的示例首先提取所有连续的组,然后检查特定组中的唯一元素是否为a。如果是这样,它将用相应的元素数替换该组,否则,它保留原始输入。

from itertools import groupby

s = 'aaabaacdd' #test input

ret = ''
for k, v in groupby(s):
    chunk = list(v)
    cnt = len(chunk)

    if k == 'a': #the condition can be extended here, e.g., k == 'a' and cnt <= 9
        #substitute the group of 'a's with something else
        #the substitution can take into account the number of consecutive
        #'a's stored in the variable cnt
        el = '%d' % (cnt)
    else:
        el = ''.join(chunk)
    ret += el
print(ret)

产生

3b2cdd

答案 1 :(得分:0)

字符串的简单解决方案(一行)。您可以将其扩展为读取文件。

f = 'a b aa b aaa b'
output = f

for i in range(9,0,-1):
    output = output.replace('a' * i, str(i))

print(output)  # 1 b 2 b 3 b