要查找包含任何Python中給出的關鍵字行,你可以使用正則表達式:
import re
from itertools import ifilter
def fgrep(words, lines):
# note: allow a partial match e.g., 'b c' matches 'ab cd'
return ifilter(re.compile("|".join(map(re.escape, words))).search, lines)
把它變成一個命令行腳本:
import sys
def main():
with open(sys.argv[1]) as kwfile: # read keywords from given file
# one keyword per line
keywords = [line.strip() for line in kwfile if line.strip()]
if not keywords:
sys.exit("no keywords are given")
if len(sys.argv) > 2: # read lines to match from given file
with open(sys.argv[2]) as file:
sys.stdout.writelines(fgrep(keywords, file))
else: # read lines from stdin
sys.stdout.writelines(fgrep(keywords, sys.stdin))
main()
例子:
$ python fgrep.py a b > fruitfound.txt
有更高效的算法,例如,Ago-Corasick algorithm,但它需要少於一秒鐘o在我的機器上過濾了數百萬行,這可能已經足夠好了(grep
要快幾倍)。令人驚訝的是基於Ago-Corasick算法的acora
對於我嘗試過的數據來說比較慢。
來源
2012-12-26 00:42:56
jfs
尊敬的用戶,歡迎來到SO。解釋你已經嘗試了什麼,問題是什麼,我們將盡我們所能幫助你。 –
您可以將grep命令合併爲一個:'grep -f a b> fruitfound.txt' – jfs