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