逐行重新编号

Laj*_*s N 7 python

我有一个输入文本,看起来像这样:

word77 text text bla66 word78 text bla67
text bla68 word79 text bla69 word80 text
bla77 word81 text bla78 word92 text bla79 word99
Run Code Online (Sandbox Code Playgroud)

我不得不重新编号wordbla 从1,每行。

我可以对整个输入重新编号,如下所示:

word1 text text bla1 word2 text bla2
text bla3 word3 text bla4 word4 text
bla5 word5 text bla6 word6 text bla7 word7
Run Code Online (Sandbox Code Playgroud)

上述代码:

import re
def replace(m): global i; i+=1; return str(i);
fp = open('input.txt', 'r').read()
i = 0
fp = re.sub(r'(?<=word)(\d+)', replace, fp)
i = 0
fp = re.sub(r'(?<=bla)(\d+)', replace, fp)
#open('sample.txt', 'wb').write(fp)
print fp
Run Code Online (Sandbox Code Playgroud)

理想情况下,结果应如下所示:

word1 text text bla1 word2 text bla2
text bla1 word1 text bla2 word2 text
bla1 word2 text bla3 word3 text bla4 word4
Run Code Online (Sandbox Code Playgroud)

Pat*_*ner 8

您一次对整个文件进行操作 ( fp.read()) - 您需要按行进行操作:

with open("input.txt","w") as f:
    f.write("""word77 text text bla66 word78 text bla67
text bla68 word79 text bla69 word80 text
bla77 word81 text bla78 word92 text bla79 word99""")

import re

i = 0

def replace(m): 
    global i 
    i+=1
    return str(i)

with open('input.txt') as fp, open("output.txt","w") as out:
    # read only one line of the file and apply the transformations
    for line in fp:
        i = 0
        l = re.sub(r'(?<=word)(\d+)', replace, line)
        i = 0
        l = re.sub(r'(?<=bla)(\d+)', replace, l)
        out.write(l)

with open("output.txt") as f:
    print(f.read())
Run Code Online (Sandbox Code Playgroud)

输出:

word1 text text bla1 word2 text bla2
text bla1 word1 text bla2 word2 text
bla1 word1 text bla2 word2 text bla3 word3
Run Code Online (Sandbox Code Playgroud)