[英]How to write at a particular position in text file without erasing original contents?
我已经用Python编写了一个代码来遍历文件,提取所有数字,然后添加它们。 我现在必须在文件中的某个特定位置写一个'total'(整数)来表示something something something...Total: __00__ something something
。
我必须写出我在Total: __
部分后完全计算出来的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='__'>
<_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才有用。 否则,您将不得不重写该点之后的文件的所有字节(因为大多数文件系统对文件没有“插入”操作)。
我猜你错过的是以正确的模式打开文件来重新编写它。
f = open(filename,"r+b")
f.seek(POSITION)
f.write(DATA)
f.close()
您需要添加适当的错误检查...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.