2016-06-18 54 views
0

再次道歉为这里的noob:尝试以下代码以搜索从关键字中读取的多个字符串并在f中搜索并打印行。 它可以工作,如果我只有一个关键字,但不是如果我有多个关键字。在文件中搜索多个字符串(来自文件)并打印该行

keywords = input("Please Enter keywords path as c:/example/ \n :") 
keys = open((keywords), "r").readline() 
with open("c:/saad/saad.txt") as f: 
    for line in f: 
     if (keys) in line: 
      print(line) 
+1

你能提供一个输入和预期输出? –

+0

这个关键字文件的格式是什么?在一行中用空格分隔的一堆单词? – tdelaney

+0

关键字(“AA”,“BB”): 文件包含这样一行(AA好,BB很不错,CC不好): 预期的输出为: AA好 BB是非常好的 – Saadi381

回答

2

查找关键字的挑战之一就是定义关键字的含义以及如何解析文件内容以找到完整的关键字集。如果“aa”是关键字,它应该匹配“aaa”还是“aa()”?关键字是否可以包含数字?

一个简单的解决方案是说关键字只是字母,并且应该匹配连续。字母字符串完全不考虑大小写,而且,比赛应该算是一行行,不是一句一句我们可以使用正则表达式查找字母序列,并设置检查遏制像这样:

keys.txt

aa bb 

test.txt

aa is good 
AA is good 
bb is good 
cc is not good 
aaa is not good 

test.py

import re 

keyfile = "keys.txt" 
testfile = "test.txt" 

keys = set(key.lower() for key in 
    re.findall(r'\w+', open(keyfile , "r").readline())) 

with open(testfile) as f: 
    for line in f: 
     words = set(word.lower() for word in re.findall(r'\w+', line)) 
     if keys & words: 
      print(line, end='') 

结果:

aa is good 
AA is good 
bb is good 

添加更多的规则,你的意思是匹配什么,它变得更加复杂。

编辑

假设你有每行一个关键字,你只想要一个字符串匹配(即,“AA”匹配“AAA”),而不是关键字搜索,你可以做

keyfile = "keys.txt" 
testfile = "test.txt" 

keys = [key for key in (line.strip() for line in open(keyfile)) if key] 

with open(testfile) as f: 
    for line in f: 
     for key in keys: 
      if key in line: 
       print(line, end='') 
       break 

但我只是猜测你的标准是什么。

+0

我有试过这个,但有几个问题; 1。由于某种原因,它不会搜索任何东西,如果输入关键字每行一个像 aa bb cc 如果我把关键字放在一行然后它只返回bb 2。其次,如果我想返回'aaa',以及如果搜索'aa'关键字 – Saadi381

+0

,那么您需要为're.findall()'函数使用不同的[正则表达式]。 –

+0

输入文件可以有多种格式,不可能涵盖所有的可能性。你可以把样品放在你的问题中,就像我在我的回答中一样。对于每行一个键,您可以逐行读取文件,去除空白,然后过滤空容器,例如'keys = [key for key in(line.strip()for line in open(keyfile))if key]'。要匹配'“aaa”',你要做一个子串搜索,而不是一个正则表达式。 – tdelaney

0
keywords = input("Please Enter keywords path as c:/example/ \n :") 
keys = open((keywords), "r").readline() 
keys = keys.split(',') # separates key strings 
with open("c:/saad/saad.txt") as f: 
    for line in f: 
     for key in keys: 
      if key.strip() in line: 
       print(line) 

您正在以一个字符串阅读该行。您需要制作每个逗号分隔字符串的列表。然后测试每条线每个键(除围绕重点空格)

这是假设您的关键字的文件是一样的东西:AA好,BB好,垃圾邮件,鸡蛋

相关问题