Renumbering line by line

You operate on the whole file at once (fp.read()) - you need to do it line-wise:

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())

Output:

word1 text text bla1 word2 text bla2
text bla1 word1 text bla2 word2 text
bla1 word1 text bla2 word2 text bla3 word3

Tags:

Python