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

守給你的承諾、 提交于 2019-12-18 07:04:27

问题


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.


回答1:


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)



回答2:


Seek will only be useful if you are not changing the length of the file with the operation (that is: you leave enough bytes in the file at that location to write any possible total value). Otherwise you will have to re-write all bytes of the file that follow that point (because most file systems do not have an "insert" operation on files).

I'm guessing what you missed is opening the file in the correct mode to re-write it.

f = open(filename,"r+b")
f.seek(POSITION)
f.write(DATA)
f.close()

You will want to add appropriate error checking...



来源:https://stackoverflow.com/questions/34061909/how-to-write-at-a-particular-position-in-text-file-without-erasing-original-cont

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!