如果存在终止行,则使用Python提取数据

时间:2012-12-28 13:39:53

标签: python-2.4

我目前正在尝试使用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])

1 个答案:

答案 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