【问题标题】:Most efficient way of inserting new data between lines of a file在文件的行之间插入新数据的最有效方法
【发布时间】:2017-11-09 03:00:50
【问题描述】:

在 Python 2.6 中是否有一种更有效的方法来逐行搜索文件(查找字符串)并在找到它之后将一些行插入到该文件中?所以输出文件将与输入文件相同,在其间添加几行。另外,我宁愿不将这些文件读入缓冲区,因为这些文件可能非常大。

现在,我正在逐行读取文件并将其写入临时文件,直到找到要查找的行,然后在临时文件中插入额外的数据。并将其余数据写入临时文件。处理完文件后,用新的临时文件覆盖旧文件。 像这样的:

    with open(file_in_read, 'r') as inFile:
       if os.path.exists(file_in_write):
         os.remove(file_in_write)
       with open(file_in_write, 'a') as outFile:
         for line in inFile:
           if re.search((r'<search_string',line):
             write_some_data(outFile)
             outFile.write(line)
            else:
              outFile.write(line)
os.rename(src,dst)

我只是想知道我是否可以加快速度。

【问题讨论】:

标签: python file scripting


【解决方案1】:

看起来使用标准库中的fileinput 模块是可行的方法。您可以将代码简化为:

import fileinput
import re
import sys

regex = re.compile(r'<pattern>')

for line in fileinput.input(file_in_read, inplace=True):
    sys.stdout.write(line)
    if regex.search(line):
        sys.stdout.write(additional_lines)

【讨论】:

    【解决方案2】:

    您可以使用file.seek 查找文件的某个点并在那里写入,但这样数据将在文件中具有固定的偏移量,这通常不是您想要的。

    如果数据需要追随其他一些数据,而这个数据没有固定的偏移量和大小,那么就没有办法了,你需要读取它来找出它的偏移量和大小。

    您可能遇到 x,y 问题。当您认为可以通过 y 解决 x 时,您会在 y 上寻求帮助,而不是在 x 中寻求帮助。如果您与这些文件分享您尝试获取的内容,其他人可能会提出更好的解决方案。

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 2016-02-03
      • 2012-08-06
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多