learnerX learnerX - 1 month ago 7
Python Question

How to write at a particular position in text file without erasing original contents?

I've written a code in Python that goes through the file, extracts all numbers, adds them up. I have to now write the 'total' (an integer) at a particular spot in the file that says

something something something...Total: __00__ something something
.

I have to write the total that I have calculated exactly after the
Total: __
part which would mean the resulting line would change to, for example:
something something something...Total: __35__ something something
.

So far I have this for the write part:

import re
f1 = open("filename.txt", 'r+')
for line in f1:
if '__' in line and 'Total:' in line:
location = re.search(r'__', line)
print(location)


This prints out:
<_sre.SRE_Match object; span=(21, 23), match='__'>


So it finds the '__' at position 21 to 23, which means I want to insert the total at position 24. I know I have to somehow use the
seek()
method to do this. But I have tried and failed several times. Any suggestions would be appreciated.

Important: The original contents of the file are to be preserved as it is. Only the total changes -- nothing else.

Answer

If the file is not particularly large, you can read its contents as a list of lines replacing the required line and write the contents back. Something like this:

with open(filename, "r+") as f:
    lines = [line.replace("__00__", "__{}__".format(total))
             if "Total: __00__" in line else line
             for line in f]
    f.seek(0)
    f.truncate()
    f.writelines(lines)