在文件行之间插入新数据的最有效方法

时间:2017-11-09 03:00:50

标签: python file scripting

在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)

我只是想知道我能不能以某种方式加速它。

2 个答案:

答案 0 :(得分:0)

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

如果数据需要追踪其他数据并且这个数据没有固定的偏移量和大小,那么就没有办法了解你需要读取它以找出它的偏移和大小。

您可能遇到x,y问题。如果您认为可以解决x,那么您可以在y上寻求帮助,而不是在x中寻求帮助。如果您分享您尝试使用这些文件的内容,其他人可能会建议更好的解决方案。

答案 1 :(得分:0)

看起来使用标准库中的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)