2017-03-11 6 views
2

私はうまくいけば簡単な質問があります。私はちょうど使用する正しい機能を把握できません。連続して何回繰り返されるかによって、繰り返し文字を異なる変数に置き換えたい。Python連続した文字を異なる変数に置き換えてください。

 
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) 

はそうならば「」私は3で「AAA」を交換したいというように9。問題まで、彼らは関係なく、カウントしている場合は、その連続したかをカウントしている連続して3回繰り返されます。私が一度に2文字または3行を読むと、それはそれを切り刻む。任意のアイデアや助けてください。

答えて

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) 

文字列(1行)のため

3b2cdd 
+0

私はそれを適切な、私は十分に私の質問を明確にしませんでした。それはちょうどaの量を数え、長さを入れます。どのように私はそれを変更することができますので、私は変数として 'aaa'は3の代わりに 'Z'になることを望むものを入れます。それは変更されます。 – LetsChangeTheWorld

+0

@LetsChangeTheWorldは、 'el = '%d'%(cnt)'を使用する置換で置き換えます。例えば、 'el = 'Z'' – ewcz

+0

ありがとう、をしていました。私はそれをかなり簡単に読み込みファイルに入れることができました。 – LetsChangeTheWorld

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 
関連する問題