2014-10-09 50 views
1

對Python非常新穎。我開始寫一個PHP腳本來查找txt文件中所有出現的2個字符串,但它使用的內存太多,所以我讀Python會更好。搜索txt文件並在所有匹配項之間顯示數據

基本上是我需要做的是: - 導入txt文件 - 通過它,並將所有低於 標籤之間的數據 - 刪除任何重複 - 輸出結果

比特我」 m看起來是這樣的:

------DATA-------------------------------------------------- 
DATA TO SHOW 
------------------------------------------------------------ 

當然,輸出的重要位是DATA TO SHOW部分。

任何幫助,將不勝感激:)

感謝

UPDATE -----------------------

import re 

inputFile = open("small.txt", "r") 
output = open("result.txt", "w") 


searchStart = "----- ASSERT --------------------------------------------------------------------------------" 
searchEnd = "---------------------------------------------------------------------------------------------" 


match = re.findall('^----- ASSERT --------------------------------------------------------------------------------\n(.*?)---------------------------------------------------------------------------------------------', inputFile.read(), re.MULTILINE) 
print match, 

任何想法如何讓它顯示所有的行,直到它達到searchEnd標記?示例數據:

----- ASSERT -------------------------------------------------------------------------------- 
MORE 
INFO 
THAT 
I 
NEED 
TO 
GET 
FROM 
THE 
FILE 
--------------------------------------------------------------------------------------------- 
+0

你能給什麼將是這些標籤之間的樣本。它會大大影響爲它編寫的代碼嗎? – 2014-10-09 16:14:25

+0

' - + DATA - + \ n。*?\ n - + \ n'應該這樣做 – vks 2014-10-09 16:16:36

+0

問題不是您使用的語言,而是您如何處理文件。要做到你想要的而不消耗太多內存,你必須逐行讀取你的文件,當到達「開始標記」時,開始記錄數據。在結束標記處停止記錄。如果將整個文件加載到一個變量中,並且使用不良模式處理它,則正常情況下會遇到內存問題。 – 2014-10-09 16:45:18

回答

0

與PHP的一個例子(未測試,這個想法是在這裏):

$handle = fopen("inputfile.txt", "r"); 
if ($handle) { 
    $record = false; 
    while (($line = fgets($handle)) !== false) { 
     if ($line == '------DATA--------------------------------------------------') { 
      $record = true; 
      $temp = ''; 
     } elseif ($record) { 
      if ($line == '------------------------------------------------------------') { 
       $record = false; 
       $results[] = $temp; 
       $temp = ''; 
      } else $temp .= $line; 
     } 
    } 
} else { 
    echo 'Gargoyl, the file can\'t be opened!'; 
} 
fclose($handle); 
print_r($results); 
+0

感謝您:)有什麼辦法可以在Python中完成它。 (覆蓋我的背部,因爲我們所有的工作機器都安裝了python – tutchmedia 2014-10-10 08:02:42

+0

更新了我原來的帖子,我已經在Python端得到了它,但現在我被卡住了,因爲我無法將它拉到所有行,直到searchEnd tag。 有什麼想法?:) – tutchmedia 2014-10-10 11:29:39

相關問題