Python 3:使用正则表达式搜索大型文本文件

Python 3:使用正则表达式搜索大型文本文件,python,regex,text,python-3.x,Python,Regex,Text,Python 3.x,我希望使用regex搜索一个大文本文件,并设置了以下代码: 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的第二个参数应该是字符串或

我希望使用regex搜索一个大文本文件,并设置了以下代码:

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
的第二个参数应该是字符串或缓冲区。但是,我无法将所有文本文件插入到字符串中,因为它太长(这意味着它将花费永远的时间)。替代方案是什么?

检查每行的模式是否匹配。这不会将整个文件加载到内存:

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

您可以将内存映射文件与模块一起使用。将其视为一个假装为字符串的文件(或StringIO的反面)。您可以在Doug Hellman的例子中找到。

假设您的文件位于本地驱动器上且不超过可用内存,则加载文件所需的时间将大大少于运行正则表达式所需的时间。你真的试过先读取整个内容吗?@beerbajay,CPU处理字符串的速度比硬盘读取字符串的速度快。简单表达式的运行速度将快于从磁盘读取它们。(除非你使用的是速度相当快的SSD/RAID);我的反应是“这将需要永远”。问题是:我打印的结果只是一个
()
。将第11行更改为
print(result)
只会返回类似
的结果。第11行应该是什么才能给出正确的结果?或者,如果该文件是一个大的二进制文件(不是基于文本的行),您可以一次加载和正则表达式部分。@Secator:这种逐行匹配正则表达式的方法有问题。如果正则表达式匹配两行或更多行,该怎么办?类似这样的一个例子—(那个regex是我以前做的,你的代码在这种情况下肯定不起作用)@PushpakDagade-Steven的答案可以用在这种情况下。