我正在尝试使用以下代码将正则表达式应用于整个文件(不仅仅是每一行):
import mmap, re
ifile = open(ifilename)
data = mmap.mmap(ifile.fileno(), 0)
print data
mo = re.search('error: (.*)', data)
if mo:
print "found error"
这是基于问题的答案如何重新搜索或重新匹配整个文件而不将其全部读入内存? https://stackoverflow.com/questions/454456/how-do-i-re-search-or-re-match-on-a-whole-file-without-reading-it-all-into-memor
但我收到以下错误:
Traceback (most recent call last):
File "./myscript.py", line 29, in ?
mo = re.search('error: (.*)', data)
File "/usr/lib/python2.3/sre.py", line 137, in search
return _compile(pattern, flags).search(string)
TypeError: expected string or buffer
我该如何解决这个问题?
在问题中匹配文件对象中的多行正则表达式 https://stackoverflow.com/questions/2433648/match-multiline-regex-in-file-object,我发现读取整个文件的另一种可能性如下,而不是 mmap 对象:
data = open("data.txt").read()
有任何理由选择mmap
而不是简单的缓冲区/字符串?