如何在文本文件中的特定位置写入内容而不覆盖原有内容?

9
我用Python编写了一段代码,它遍历文件,提取所有数字并将它们相加。现在我需要在文件的特定位置写入“总计”(一个整数),这个位置是这样的:something something something...Total: __00__ something something
我必须将我计算出来的总数准确地写在Total: __的位置之后,这意味着结果行会变成如下形式:something something something...Total: __35__ something something
到目前为止,我已经写好了以下用于写入的代码:
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)

这会打印出:<_sre.SRE_Match object; span=(21, 23), match='__'>

所以它在位置 21 到 23 找到了 '__',这意味着我想在位置 24 插入总数。我知道我必须以某种方式使用 seek() 方法来实现这一点。但是我尝试了几次都失败了。欢迎提供任何建议。

重要提示:原始文件内容应按原样保留。只更改总数--不更改其他内容。

2个回答

7
如果文件不是特别大,你可以将它的内容读入内存作为一个字符串(或者行的列表),进行替换后再写回。可以使用以下类似的方法:
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)

4

只有在操作中不改变文件长度时,Seek才有用(也就是说:您需要在该位置留下足够的字节来写入任何可能的总值)。否则,您将不得不重写文件后面跟随该点的所有字节(因为大多数文件系统没有文件“插入”操作)。

我猜您错过的是以正确的模式打开文件进行重新编写。

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

您需要添加适当的错误检查...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接