2012-12-25 55 views
-4

新手問題的Python:使用值從文件到另一個文件

我有2個文件 文件中的搜索行:與項目(蘋果,梨,桔子) 文件B的列表文件:文件,所有的水果世界(1,000,000行)

在UNIX我就從文件b的grep蘋果和返回所有結果

在UNIX我就從文件b >> fruitfound.txt 1. grep的蘋果。來自文件b的grep梨>> fruitfound.txt 3. grep來自文件b的桔子>> fruitfound.txt

我想要一個使用文件a和搜索文件b中的值的python腳本,然後寫出輸出。注:文件B將有青蘋果,紅蘋果,黃蘋果,我希望寫所有3個結果到fruitfound.txt

最親切的問候

Kornity

+0

尊敬的用戶,歡迎來到SO。解釋你已經嘗試了什麼,問題是什麼,我們將盡我們所能幫助你。 –

+0

您可以將grep命令合併爲一個:'grep -f a b> fruitfound.txt' – jfs

回答

1

grep -f $patterns $filename正是這麼做的。不需要使用python腳本。

0

要查找包含任何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對於我嘗試過的數據來說比較慢。

相關問題