为了账号安全,请及时绑定邮箱和手机立即绑定

从文本中提取行的另一种方法(python-regex)

从文本中提取行的另一种方法(python-regex)

慕桂英4014372 2021-03-30 19:15:42
我正在寻找一种从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'])]

集成到您的代码中应该很简单。


查看完整回答
反对 回复 2021-04-06
  • 3 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信