2014-03-26 68 views
0

我有以下示例文本文件(它的格式如下所示)。我想提取「Generating configuration ....」和「show accounting log all」這兩行之間的所有內容。這是我感興趣的開始和結尾。在兩行字符串之間提取文本文件中的行

某些行
更多行
生成配置....
感興趣配置
感興趣配置
感興趣配置
`顯示記帳日誌all`
一些線
一些線

我寫了下面的代碼,但是它找到'show accounting log all`後不停止向文本文件追加行。

config_found = False 
    with open(filename, 'rb') as f: 
     textfile_temp = f.readlines() 

    for line in textfile_temp: 
     if re.match("Generating configuration....", line): 
      config_found = True 
     if re.match("`show accounting log all`", line): 
      config_found = False 
     if config_found: 
      i = line.rstrip() 
      textfile.append(i) 

我在做什麼錯我的陳述?

+4

看起來像在你的示例內容中,他們反映了'show accountin' g log all',並且在你的代碼中它正在尋找單引號,所以它永遠不會匹配。 (爲什麼使用正則表達式模塊re,而不是簡單的字符串比較?) – TessellatingHeckler

回答

0

config_found似乎沒有範圍外部循環。

config_found = False放在循環之前,它應該很好。

2

而不是單引號,你必須在你的比較中使用反引號,你可以讓if和elif在字符串之間提取。我已經修改如下,它的工作:

with open('file.txt', 'rb') as f: 
    textfile_temp = f.readlines() 
    config_found = False 
    textfile = [] 
    for line in textfile_temp: 
     if re.match("`show accounting log all`", line): 
      config_found = False 
     elif config_found: 
      i = line.rstrip() 
      textfile.append(i) 
     elif re.match("Generating configuration....", line): 
      config_found = True 
    print textfile 

輸出:

['interested config', 'interested config', 'interested config'] 

相反,你可以使用如下分割:

with open('file.txt', 'rb') as f: 
    textfile_temp = f.read() 
    print textfile_temp.split('Generating configuration....')[1].split("`show accounting log all`")[0] 

輸出:

interested config 
interested config 
interested config 
+0

只需添加即可在鍵盤上找到「反向」字符,通常在「tab」鍵上方,與「tilde 「(〜)鍵。 – justhalf

+0

user3感謝這工作!我在原始代碼中的if語句有什麼問題(我修正了反引號,但仍然失敗)?我似乎無法理解爲什麼它不會奏效。 – mmxool

+0

您正在加載結果變量後,您正在更改config_found變量。這應該被扭轉。 – user3

相關問題