【问题标题】:Simple, efficient way to writing to a specific line number in python在 python 中写入特定行号的简单有效的方法
【发布时间】:2013-11-18 18:21:15
【问题描述】:

我有一个文件,我需要在特定的行上写一些内容。我知道哪些行并且我想覆盖该行的内容。

例如,我有一个 100 行的文本文件,我想专门写到第 70 行。我知道我可以逐行读取并保留一个计数器,当我到达第 70 行时,我可以写下我需要。我还可以读取文件的全部内容,将其拆分为列表,覆盖我需要的位置并回写。

我正在寻找更简单的东西,例如:

somelibrary.writeline(file, 70, "Blah blah")

在 Python 中有这样的东西吗?

【问题讨论】:

  • 您可以将文件加载到内存中,根据需要进行更新,然后将整个文件覆盖回原始文件。 虽然不是很可扩展。
  • 可能有一个库可以为这样的事情提供一些方便的方法,但你不能真正让它比通读文件和计算换行符更有效。行有任意长度,因此您不能只从文件开头寻找一些固定的偏移量,并且没有元数据索引行或为您提供有关行长度的信息,所以最终,您只需要遍历每个字符并注意你感兴趣的那些。

标签: python file-io


【解决方案1】:

除非新行与旧行完全一样,否则最好的选择是重写文件。

最简单的方法是使用fileinput module

import sys, fileinput

for count, line in enumerate(fileinput.input(filename, inplace=True)):
    if count == 69:  # Python counts from 0
        line = newvalue
    sys.stdout.write(line)

这会创建文件的备份,并且输出会转到替换旧文件的 文件。写入sys.stdout 会写入新文件(替代方法是使用print,但line 仍包含换行符)。

【讨论】:

    【解决方案2】:

    在你的行总是相同长度的特殊情况下,你可以使用

    with open('myfile.txt', 'rb+') as f:
        f.seek(FIXED_LINE_LENGTH * line_number)
        f.write(new_line)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多