2015-08-17 26 views
1

我試圖做一個代碼中的特定行:的Python:選擇文本

  • 打開一個文本文件
  • 去,隨着「開始」
  • 去行啓動線3從與「開始」開始的行(先前選擇的)
  • 檢查,如果該行包含「含有」字

若是=打印「OK」:

str1 = "Start" 

with open("C:...test.txt") as file: 
for line in file: 
    if str1 in line: 
     if "contain" in line: 
      print "OK" 
     else: 
      print "NOK" 

我需要的「3號線」綜合條件

+0

您可以添加一個計數器變量 –

回答

0

爲了獲得更好的內存使用情況,您可以使用列舉的行號追蹤:

str1 = "Start" 
fp = open("C:...test.txt") 
check = 0 
for i,line in enumerate(fp): 
    if str1 in line: 
     check = i 
     continue 
    if "contain" in line and (i == check + 3): 
     print "OK" 
    else: 
     print "NOK" 

在這裏,我==檢查+ 3條件會檢查你的3號線的條件。

+0

這有一個缺點:假設:第1行,第2行包含「開始」,第4行包含「包含」,這種方法會「遺漏」。 – luoluo

+0

對我進行了一些修改+來自@ zineb.l的建議 –

0

可能是小的開銷,但如果你的文件是不是太大了,我只希望通過轉儲在列表L的每一行,然後循環該列表 - 如果行r以str1開頭,則只需執行L [r + 3]並檢查它是否包含'contains'。

+0

該文件大約爲1mb;和更少的內存/緩存使用率=腳本越好。 –

0

使用兩個列表來存儲與您的規則匹配的位置。

然後檢查位置匹配您的相對偏移量。

start_lines = [] 
contains_lines = [] 
with open("C:...test.txt") as inp: 
    line_num = 0 
    for line in inp: 
     if line.startswith("start"): 
      start_lines.append(line_num) 

     if "contains" in line: 
      contains_lines.append(line_num) 

     line_num += 1 

print [line_num for line_num in contains_lines if line_num - 3 in start_line] 
0

@Mehdi ouahabi你示意說:「去與開始啓動線」,所以我們只檢查那些開始「啓動」的臺詞,而不是那些含有開始在中間或結尾:

with open("test.txt") as file: 
    for line in file: 
     if line.startswith("Start"): #instead of "str1 in line" 
      if "contain" in line: print "OK" 
      else: print "NOK" 

***編輯:***在這種情況下,你會檢查是否有行開始/包含今天的日期

from datetime import date 
with open("test.txt") as file: 
    for line in file: 
     #if str(date.today()) in line:#check if today's date exist in the line 
     if line.startswith(str(date.today())): #check if the line start with today's dates 
      if "contain" in line: print "OK" 
      else: print "NOK" 
+0

感謝這個想法.. 萬一我們想要在行的開頭檢查今天的日期..它會像「datetime.date.today() 「,這會工作嗎?我試圖用「如果行日期時間...」,但它不起作用 –

+0

你能澄清更多,你想檢查一些日期在行開頭的存在?或只是今天的日期 – tparadisez

+0

@Mehdiouahabi我編輯迴應,以檢查一條線是否開始/包含今天的日期 – tparadisez