我正在尝试在包含特定关键字的行之前复制第四行。
if line.find("keyword") == 0:
f.write(line -3)
我不需要找到关键字的行,但前面有4行。由于write方法不适用于行号,因此卡住了
答案 0 :(得分:0)
你可以使用一个列表,每行追加到列表中(截断到最后4行)。当你到达目标线时,你就完成了。
last_3 = []
with open("the_dst_file") as fw:
with open("the_source_file") as fr:
for line in fr:
if line.find("keyword") == 0:
fw.write(last_3[0] + "\n")
last_3 = []
continue
last_3.append(line)
last_3 = last_3[-3:]
如果知道文件格式的方式是"关键字"在它之前总是至少有3行,在实例之间至少有3行,那么上面就好了。如果没有,那么你需要通过在拉出第一个元素之前检查last_3
的len是否为== 3来防止写入。
答案 1 :(得分:0)
如果您已经使用了两个文件,那就像保留缓冲区并在遇到匹配时写出最后3个条目一样简单:
buf = [] # your buffer
with open("in_file", "r") as f_in, open("out_file", "w") as f_out: # open the in/out files
for line in f_in: # iterate the input file line by line
if "keyword" in line: # the current line contains a keyword
f_out.writelines(buf[-3:]) # write the last 3 lines (or less if not available)
f_out.write(line) # write the current line, omit if not needed
buf = [] # reset the buffer
else:
buf.append(line) # add the current line to the buffer