我正在处理一个大型文档,需要在文档中找到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。我还假设一旦解决了这个问题,尝试定义前几行的方式就会给我一个错误。有什么建议吗?
答案 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