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

learnerX picture learnerX · Dec 3, 2015 · Viewed 16.8k times · Source

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

Eugene Yarmash picture Eugene Yarmash · Dec 3, 2015

If the file is not particularly large, you can read its contents in memory as a string (or a list of lines), do the replacement and write the contents back. Something like this:

total = 'Total: __{}__'.format(12345)

with open(filename, 'r+') as f:
    contents = f.read().replace('Total: __00__', total)
    f.seek(0)
    f.truncate()
    f.write(contents)