如果给出文档列表,文档中包含字符串,您如何进行搜索并从文档中搜索并返回包含您要搜索的字符串的文档列表?
对于此问题陈述,我如何在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()