python grep 列表_关于python:跨多个文档的字符串搜索 – grep?
如果給出文檔列表,文檔中包含字符串,您如何進行搜索并從文檔中搜索并返回包含您要搜索的字符串的文檔列表?
對于此問題陳述,我如何在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()
總結
以上是生活随笔為你收集整理的python grep 列表_关于python:跨多个文档的字符串搜索 – grep?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: attribute java c_属性别
- 下一篇: websocket python爬虫_p