有:
f = open(...)
r = re.compile(...)
Run Code Online (Sandbox Code Playgroud)
需要:
找一个大文件中第一个匹配正则表达式的位置(开始和结束)?
(从current_pos=...) 开始
我怎样才能做到这一点?
我想要这个功能:
def find_first_regex_in_file(f, regexp, start_pos=0):
f.seek(start_pos)
.... (searching f for regexp starting from start_pos) HOW?
return [match_start, match_end]
Run Code Online (Sandbox Code Playgroud)
文件'f'预计会很大.
Gre*_*ill 31
搜索大文件的一种方法是使用mmap库将文件映射到大内存块.然后,您可以搜索它,而无需明确阅读它.
例如,类似于:
size = os.stat(fn).st_size
f = open(fn)
data = mmap.mmap(f.fileno(), size, access=mmap.ACCESS_READ)
m = re.search(r"867-?5309", data)
Run Code Online (Sandbox Code Playgroud)
这适用于非常大的文件(我已经为大小超过30 GB的文件完成了它,但如果你的文件超过GB或者两个,你需要一个64位的操作系统).