如何在txt文件中不同地编辑2条相同的行(和前几行)?

时间:2019-07-18 13:54:16

标签: python python-3.x

我正在处理一个大型文档,需要在文档中找到2个特定的,相同的行块,并对每个块执行不同的编辑。值得注意的是,我需要能够找到某个关键字的块,然后编辑包含该关键字的行以及上一行。

我试图将以前的问题中的代码放在一起,例如: python how to write to specific line in existing txt file

示例文档为:

   hundreds of lines of text
   more lines

   previous line1
   search_term line1

   previous line2
   search_term line 2

   more blocks of text

在这里,我想找到包含搜索词的两行,然后对其进行编辑,以及它们的前几行。

下面是我尝试使用的代码的简化示例。

with open(end_file1, "r+") as f2:
    with open(act_end1, "w+") as f3:
        lines = f2.readlines()
        def index_searched(lines, substring):
            for i, s in enumerate(lines):
                if search_item in s:
                    i = lineNUM
                    linei[1] = i
                    break
            for i>lineNUM, s in enumerate(lines):
                if search_item in s:
                    linei[2] = i
            return -1

        for line in lines:
            if len(lines) > int(linei[1]):
                line = lines[linei[1]]
                previous = line[-1]
                #do stuff
             if len(lines) > int(linei[2]):
                line = lines[linei[2]]
                previous = line[-1]
                #do stuff

在第一个循环中尝试保存linei [i]的部分出现错误。我试图用它来创建linei [1]和linei [2],这将给找到搜索字符串的行#s。我还假设一旦解决了这个问题,尝试定义前几行的方式就会给我一个错误。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您实际上要解决的问题是什么,您可以发布一个包含通用数据的示例吗?几乎可以肯定,使用正则表达式或类似代码可以更轻松地完成此操作。您也可能不想在while循环中定义函数。

正则表达式解决方案示例

import re

test_str = """hundreds of lines of text
    more lines

    previous line1
    search_term


    previous line2
    search_term

    more blocks of text"""

regex = r"(?P<prev_line>.*)\n(?P<match_line>.*search_term.*)"

matches = re.findall(regex, test_str)
for i, match in enumerate(matches, start=1):
    print(f'Match: {i}\n\tPrev Line: {match[0]}\n\tMatch Line: {match[1]}')

示例输出

Match: 1
        Prev Line:      previous line1
        Match Line:     search_term
Match: 2
        Prev Line:      previous line2
        Match Line:     search_term