跨多个文档的字符串搜索 - grep?

时间:2016-10-30 19:30:24

标签: python c algorithm grep

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

如何针对此问题声明在Python或C中实现程序?我考虑过grep,但我不确定如何在原生Python / C应用程序中实现它。

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

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

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

天真的方法

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 algorithm的字符串搜索算法。关于how grep runs fast,请参阅此其他内容。

可能是您想要的方法

grep -l pattern files