我正在寻找一种从python中的相当大的数据库中提取行的方法。我只需要保留那些包含我的关键字之一的关键字。我以为可以使用正则表达式来解决问题,所以我将下面的代码放在一起。不幸的是,这给了我一些错误(可能还因为我的关键字确实很大,几乎是500个,这些关键字写在文件listtosearch.txt中的不同行中)。import redata = open('database.txt').read() fileout = open("fileout.txt","w+")with open('listtosearch.txt', 'r') as f: keywords = [line.strip() for line in f]pattern = re.compile('|'.join(keywords))for line in data: if pattern.search(line): fileout.write(line)我也尝试过使用双循环(在关键字列表和数据库行中),但运行时间太长。我得到的错误是:Traceback (most recent call last): File "/usr/lib/python2.7/re.py", line 190, in compile return _compile(pattern, flags) File "/usr/lib/python2.7/re.py", line 240, in _compile p = sre_compile.compile(pattern, flags) File "/usr/lib/python2.7/sre_compile.py", line 511, in compile "sorry, but this version only supports 100 named groups" AssertionError: sorry, but this version only supports 100 named groups有什么建议吗?谢谢
3 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
您可能需要看一下Aho–Corasick字符串匹配算法。Python中的工作实现可以发现在这里。
该模块的简单用法示例:
from pyahocorasick import Trie
words = ['foo', 'bar']
t = Trie()
for w in words:
t.add_word(w, w)
t.make_automaton()
print [a for a in t.iter('my foo is a bar')]
>> [(5, ['foo']), (14, ['bar'])]
集成到您的代码中应该很简单。
添加回答
举报
0/150
提交
取消