python grep 列表_关于python:跨多个文档的字符串搜索 – grep?

在Python或C中如何实现跨多个文档的字符串搜索?问题讨论了使用grep、popen()函数以及不同方法的效率,包括单线程、多线程和使用Boyer-Moore算法的可能性。
摘要由CSDN通过智能技术生成

如果给出文档列表,文档中包含字符串,您如何进行搜索并从文档中搜索并返回包含您要搜索的字符串的文档列表?

对于此问题陈述,我如何在Python或C中实现程序? 我考虑过grep,但我不确定如何实现原生Python / C应用程序内部的工作。

目前的思维过程只是在循环中解析文档,然后解析所有字符串等,但似乎有点低效。

任何帮助赞赏。

你的意思是,相当于grep -le pattern document1 document2 .. documentN?

@NominalAnimal是的,我想是的。 我只使用过一次或两次grep,但我希望用Python或C实现。

C和Python 2和3都支持popen()。 有了它,你可以运行像上面提到的grep这样的shell命令,并在grep生成它们时读取结果,而不使用临时文件或其他类似的混乱。

简单的解决方案正如您所述:循环遍历文件并搜索每个文件。

天真的方法

for file in files:

for line in file:

if line contains pattern:

print file.name

如果你想要更好一点,你可以在找到匹配后立即拯救出文件。

稍微好一些

for file in files:

for line in file:

if line contains pattern:

print file.name

break # found what we were looking for. continue to next file

此时,您可以尝试跨多个线程分发问题。 您可能会受到IO限制,甚至可能会看到性能更差,因为多个线程正在尝试同时读取磁盘的不同部分

线程方法

for file in files:

# create new worker thread which does...

for line in file:

if line contains pattern:

# insert filename into data structure

break # found what we were looking for. continue to next file

# wait for all threads to finish, collect and display data

但是如果你担心性能,你应该使用grep或复制它的工作原理。 它通过将文件读取为原始二进制文件(而不是逐行分解)来节省时间,并使用称为Boyer-Moore算法的字符串搜索算法。 请参阅其他有关grep如何快速运行的信息。

可能你想要什么?途径

grep -l pattern files

您不必逐行读取文件,您可以读取整个文件并使用正则表达式进行搜索。

@wwii读取整个文件的语法是什么? 我只能找到逐行阅读的方法。

@wowdavers with open('file') as f: s = f.read()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值