2012-03-03 85 views
3

我想搜索與正則表達式大文本文件,並有建立以下代碼:的Python 3:搜索一個大的文本文件,正則表達式

import re 

regex = input("REGEX: ") 

SearchFunction = re.compile(regex) 

f = open('data','r', encoding='utf-8') 

result = re.search(SearchFunction, f) 

print(result.groups()) 

f.close() 

當然,這並不因爲第二工作re.search的參數應該是一個字符串或緩衝區。但是,我無法將所有文本文件插入到字符串中,因爲它太長(這意味着需要永久)。什麼是替代方案?

+0

[Python正則表達式解析流]的可能重複(http://stackoverflow.com/questions/4634376/python-regex-parse-stream) – Joe 2012-03-03 12:52:54

+1

假設您的文件位於本地驅動器上,並且它不大於可用內存,加載文件比運行正則表達式要花費更少的時間。你是否真的試圖先讀完整件事? – beerbajay 2012-03-03 12:56:38

+0

@beerbajay,CPU可以比HDD更快地處理字符串。簡單表達式的運行速度比從磁盤讀取速度快。 (除非你在一個非常快速的SSD/RAID)。 – Qtax 2012-03-03 16:08:43

回答

6

您檢查模式是否匹配每一行。這將不是整個文件加載到內存:

for line in f: 
    result = re.search(SearchFunction, line) 
+0

[這會變成我的新代碼?](http://pastie.org/3511298)問題是:我的打印結果只是一個'()'。將第11行更改爲「print(result)」只會返回類似於<_sre.SRE_Match object at 0x0000000002A73648>'的內容。第十一行應該怎樣才能給出正確的結果? – 2012-03-03 13:09:24

+0

或者如果文件是一個大的二進制文件(不是基於文本的行),您可以一次加載和正則表達一部分文件。 – 01100110 2012-03-03 13:22:56

+1

@Secator:這種方法逐行匹配正則表達式存在問題。如果一個正則表達式匹配兩行或更多行呢?像這樣的東西 - http://pastie.org/3511422(這個正則表達式是我後來製作的,而且你的代碼肯定不會在這種情況下工作) – 2012-03-03 13:31:13

相關問題