Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果存在终止行,则使用Python提取数据_Python_Python 2.4 - Fatal编程技术网

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

如果存在终止行,则使用Python提取数据,python,python-2.4,Python,Python 2.4,我目前正在尝试使用Python在输入文件的两行之间提取一些数据。 infle的设置是这样的,即有一行开始,当且仅当-END条件出现在下一行开始之前时,我需要下10行代码。在-END-之前多次出现-START-行。以下是我的意思的一般示例: 废话 废话 -开始- 我不需要10行 废话 -开始- 我需要10行 废话 废话 -结束- 废话 废话 -开始- 我不需要10行 废话 -开始- 。。。。等等等等 到目前为止,我只能为每次迭代获得-START-+10行,但是在指定仅当-END-condition

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

废话
废话
-开始-
我不需要10行
废话
-开始-
我需要10行
废话
废话
-结束-
废话
废话
-开始-
我不需要10行
废话
-开始-

。。。。等等等等

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

奖励:我需要将开始+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])

你在正确的轨道上。你要做的是关注你看到的行列表,并在它们运行时检查它们:如果你在十行之前看到另一个开始,放弃当前列表,重新开始。因此,您的循环如下所示:

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.writelines
后将
out
重新定义为新的输出文件即可。这样,您只需要创建所需数量的新文件。要使它们成为唯一的文件,如果没有具体的方法,只需。

是否总是正好十行,或者只是“假设起点和终点之间没有其他起点,那么起点和终点之间有多远”?以下哪一个终止因素(结束或10行)最重要?