我目前正在尝试使用Python在输入文件的两行之间提取一些数据。 infile设置为有一条线-START-当前和下一行-START-之前,当需要-END-条件时,我需要接下来的10行代码。 -START-行在-END-之前多次出现。下面是我的意思的一般例子:
嗒嗒
等等
-START-
我不需要10行
等等
-START-
我需要10行
等等
等等
(完)
等等
等等
-START-
我不需要10行
等等
-START-
....依旧等等
到目前为止,我只能为每次迭代获得-START- + 10行,但是在指定条件时只有在-END-条件出现在另一个-START之前才会完全丢失 - 条件。我有点新手,所以任何帮助都会非常感激。
奖励:我需要将每个START + 10行块打印到一个新的/唯一的outfile。 但是我还没有真正玩过,所以请随意忽略这一部分。
下面是我用于打印-START- + 10行的代码:
in = open('input.log')
out = open('output.txt', 'a')
lines = in.readlines()
for i, line in enumerate(lines):
if (line.find('START')) > -1:
out.write(line)
out.write(lines[i + 1])
out.write(lines[i + 2])
out.write(lines[i + 3])
out.write(lines[i + 4])
out.write(lines[i + 5])
out.write(lines[i + 6])
out.write(lines[i + 7])
out.write(lines[i + 8])
out.write(lines[i + 9])
out.write(lines[i + 10])
答案 0 :(得分:0)
你走在正确的轨道上。你想要做的是密切关注你所看到的行列表,并检查它们:如果你在十行之前看到另一个START,则丢弃当前列表并重新开始。所以你的循环看起来像这样:
lines_to_write = []
for line in lines:
if line.find('START') > -1:
lines_to_write = [] # Empty anything that was in the list before
if line.find('END') > -1:
out.writelines(lines_to_write) # Write all useful lines
lines_to_write = []
continue
lines_to_write.append(line)
这假设END
总是出现在正确的位置。如果你在开始之后总是想要十行,无论它们是什么(只要它们不是START
行),那么你的第二个条件就是这样:
if len(lines_to_write) == 10:
out.writelines(lines_to_write)
lines_to_write = []
continue
要将每个块打印到新的输出文件,只需在每次调用out
后将out.writelines
重新定义为新的输出文件。这样,您只需要根据需要创建任意数量的新文件。要使它们成为唯一文件,如果没有特定方法需要这样做,只需add a timestamp to the filename。