2012-12-28 45 views
0

我正在嘗試使用Python提取輸入文件的兩行之間的一些數據。 infile被設置爲使得有一條線-START-在那裏我需要接下來的10行代碼,當且僅當-END-條件發生在下一個-START-之前。 -START行在-END-之前出現多次。我的意思繼承人一般的例子:如果終止行存在,使用Python提取數據

等等
等等
-START-
10行我不需要
等等
-START-
10行,我需要
等等
等等
-END-
blah
blah
-START-
個 10行我不需要
等等
-START-

....等等等等

到目前爲止,我只能夠得到-START- + 10線每次迭代,但是在指定條件時只有在-END-條件在另一個-START條件之前時才寫入。我是一個新手,所以任何幫助將不勝感激。

獎勵:我需要將每個START + 10lines塊打印到新的/唯一的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

它總是正好十行嗎?或者它只是「儘管它在START和END之間,假設它們之間沒有其他START」?哪些終止因素(END或10行)最重要? –

回答

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.writelines後重新定義out爲新的輸出文件即可。這樣你只需要製作儘可能多的新文件。要使它們成爲獨特的文件,如果沒有特定的方法需要這樣做,只需add a timestamp to the filename

相關問題