繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM