如何在不擦除原始内容的情况下在文本文件的特定位置写入?
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()
您需要添加适当的错误检查...
我在 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()
您需要添加适当的错误检查...