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

时间:2015-12-03 09:14:24

标签: python python-3.x seek file-writing

我已经用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='__'>

所以它找到了&#39; __&#39;在位置21到23,这意味着我想在24位插入总数。我知道我必须以某种方式使用seek()方法来执行此操作。但我已多次尝试过并失败了。任何建议将不胜感激。

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

2 个答案:

答案 0 :(得分:3)

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

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)

答案 1 :(得分:2)

只有在您不通过操作更改文件的长度时才会有用(即:您在该位置的文件中留下足够的字节以写入任何可能的总值)。否则,您将不得不重写该点之后的文件的所有字节(因为大多数文件系统没有&#34;插入&#34;文件操作)。

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

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

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