如何在不擦除原始内容的情况下在文本文件的特定位置写入?

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

我在 Python 中编写了一个代码,它遍历文件,提取所有数字,然后将它们相加。我现在必须在文件中的特定位置写入 'total'(整数),上面写着 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() 方法来执行此操作。但是我试过几次都失败了。如有任何建议,我们将不胜感激。

重要提示:文件的原始内容将按原样保留。只有总的变化 -- 没有别的。

如果文件不是特别大,可以将其内容作为字符串(或行列表)读取到内存中,进行替换并将内容写回。像这样:

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)

Seek 仅在您未通过操作更改文件长度时才有用(即:您在文件中的该位置保留了足够的字节以写入任何可能的总值)。否则,您将不得不重写该点之后的文件的所有字节(因为大多数文件系统没有对文件的 "insert" 操作)。

我猜你错过的是以正确的模式打开文件以重写它。

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

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