【问题标题】:How to write at a particular position in text file without erasing original contents?如何在文本文件的特定位置写入而不擦除原始内容?
【发布时间】:2016-03-07 19:49:04
【问题描述】:

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

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

重要提示:文件的原始内容应保持原样。只有总的变化——没有别的。

【问题讨论】:

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


    【解决方案1】:

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

    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)
    

    【讨论】:

      【解决方案2】:

      仅当您不使用该操作更改文件的长度时,Seek 才会有用(即:您在该位置的文件中保留了足够的字节以写入任何可能的总值)。否则,您将不得不重写该点之后文件的所有字节(因为大多数文件系统没有对文件的“插入”操作)。

      我猜你错过了以正确的模式打开文件以重写它。

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

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

      【讨论】:

        猜你喜欢
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 2018-03-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-05
        • 1970-01-01
        相关资源
        最近更新 更多