2012-03-03 86 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

相关问题