在grep -f等文件中匹配行

时间:2016-01-06 22:35:11

标签: python design-patterns matching

我试图在两个大文件中找到匹配的行,就像grep -f 假设文件f.txt包含3行:

1  
2  
3  

,文件g.txt包含3行:

3  
4  
5  

我想打印匹配的行:

3

这就是我的尝试:

f=open('f.txt', 'r')  
g=open('g.txt', 'r')  
i=0  
for line in f:  
    search = g.readlines()[i]  
    if line.strip() == search :  
        print line  
    i += 1

这会返回错误

  
    
      

'AttributeError:'file'对象没有属性'split'

    
  

1 个答案:

答案 0 :(得分:3)

您需要读取包含要匹配到内存中的行的文件;否则,您必须读取包含搜索项的文件的每一行的搜索整个文件。我们将使用set执行此操作,因为检查set中的某些内容是否非常快。

with open("f.txt") as f:
    terms = set(line.strip() for line in f)

with open("g.txt") as g:
    for line in g:
       line = line.strip()
       if line in terms:
           print line

在这种情况下,您认为哪个文件包含搜索字词以及您认为正在搜索的文件的文件无关紧要,因为您只查找匹配项。为了最大限度地减少内存使用,您可以选择较小的内存使用{.1}}。

相关问题