簡體   English   中英

在python 3.x中有效地搜索多個文件的關鍵字的最佳方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM