我已经用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()
方法来执行此操作。但我已多次尝试过并失败了。任何建议将不胜感激。
重要说明:文件的原始内容将按原样保留。只有总的变化 - 没有别的。
答案 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()
您需要添加适当的错误检查...