[英]Best way to search multiple files for keywords efficiently in python 3.x?
抱歉,如果之前有人問過這個問題,但我似乎沒有找到解決問題的方法。
我有大約 500 個文本文件,每個文件大小約為 5-6 kB。 我需要搜索每個文件並檢查其中是否存在特定關鍵字,並打印存在關鍵字的每個文件的詳細信息。
我可以使用
for files in glob.glob("*"):
and then search for the keyword inside the file
我確信這不是最有效的方法。 有什么更好的方法嗎?
如果您想要目錄中包含stdio.h
文件的所有*.c
文件,您可以這樣做
grep "stdio\.h" *.c
(注意 - 編輯以回應@Wooble 的評論。)
結果可能如下所示
myfile.c: #include <stdio.h>
thatFile.c: #include <stdio.h>
等。
如果您想查看“上下文”(例如之前和之后的行),請使用C
標志:
grep -C1 "(void)" *.c
結果:
scanline.c-
scanline.c:int main(void){
scanline.c- double sum=0;
--
tour.c-
tour.c:int main(void) {
tour.c-int *bitMap;
等。
我認為這對你來說應該很有效。
再次,解決@Wooble 的另一點:如果你真的想用 Python 做到這一點,你可以使用
import subprocess
p = subprocess.Popen('grep stdio *.c', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in p.stdout.readlines():
print line,
retval = p.wait()
現在您可以訪問“在 Python 中”的輸出,並且可以按照您認為合適的方式使用這些行來做一些聰明的事情。
grep 並不總是一種選擇。 如果您正在編寫要在工作環境中使用的 Python 腳本,而該環境恰好主要是 Windows,那么當您告訴他們需要安裝 grep 時,您就是在為團隊進行依賴管理。 那不好。
我沒有找到比 glob 更快的搜索文件系統的方法,但是有一些方法可以加快搜索文件的速度。 例如,如果您知道您的文件將有很多短行(例如 json 或 xml 文件),您可以跳過查看任何比最小關鍵字短的行。
python 中的正則表達式庫也很慢。 一次搜索每一行一個字符以查看line[ len(str_to_search_for) : ] == str_to_search_for
比在每一行上運行正則表達式要快得多,要快一個數量級或更多。
我最近在文件系統上做了很多搜索,對於 500GB 的數據集,我的搜索從大約 8 小時開始,我設法使用這些簡單的技術將它們減少到 3。 這需要一些時間,因為您正在為您的用例定制您的策略,但是如果您這樣做,您可以從 python 中榨取很多速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.