0

我目前正在尝试使用 Python 在输入文件的两行之间提取一些数据。infile 的设置使得有一行 -START- 当且仅当 -END- 条件出现在下一个 -START- 之前,我需要接下来的 10 行代码。-START- 行多次出现在 -END- 之前。这是我的意思的一般示例:

等等
等等
-START-
10 行我不需要
等等
-START-
10 行我需要
等等
等等
-END-
等等
等等
-START-
10 行我不需要
等等
-START-

.... 等等等等

到目前为止,我只能为每次迭代获得 -START- + 10 行,但是在指定仅在 -END- 条件出现在另一个 -START- 条件之前才写入的条件时,我完全不知所措。我有点新手,所以任何帮助将不胜感激。

奖励:我需要将每个 START + 10 行块打印到一个新的/唯一的输出文件中。但我还没有真正玩过这个,所以请随意忽略这部分。

这是我用于打印 -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])
4

1 回答 1

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. 这样,您只需根据需要制作尽可能多的新文件。要使它们成为唯一文件,如果您不需要特定的方法,只需在文件名中添加时间戳即可

于 2013-04-04T13:58:48.210 回答